Wix4项目PackageReference无法解析为扩展:构建服务器异常排查
编辑:使用dotnet build [wixproj]替代msbuild已解决该问题,但我暂时保留此问题,因为我好奇自己是否误解了相关机制——我原以为HeatWave不会影响命令行msbuild构建。
我有一个Wix4项目,包含以下扩展包引用:
<ItemGroup> <PackageReference Include="WixToolset.Netfx.wixext" Version="4.0.0" /> <PackageReference Include="WixToolset.Util.wixext" Version="4.0.0" /> <PackageReference Include="WixToolset.UI.wixext" Version="4.0.0" /> </ItemGroup>
我对其底层原理并非完全熟悉,但在本地机器使用msbuild /t:Restore;Build myproject.wixproj构建时,PackageReferences会被收集到@(Extensions) MSBuild项列表中,最终作为参数传递给wix build -ext [extensionpath],此流程运行正常,相比Wix3有明显改进。
本地构建日志的相关部分如下:
WixExtension C:\Users\Username\.nuget\packages\wixtoolset.netfx.wixext\4.0.0\build\..\wixext4\WixToolset.Netfx.wixext.dll C:\Users\Username\.nuget\packages\wixtoolset.ui.wixext\4.0.0\build\..\wixext4\WixToolset.UI.wixext.dll C:\Users\Username\.nuget\packages\wixtoolset.util.wixext\4.0.0\build\..\wixext4\WixToolset.Util.wixext.dll
但在另一台机器(构建服务器)执行相同操作时,构建阶段的@(Extensions)为空,@(WixExtension)项从未被填充,相关日志显示:
Target "ResolveWixExtensionReferences" skipped, due to false condition; ( '@(WixExtension)' != '') was evaluated as ( '' != '').
因此构建失败,例如出现以下错误:
Error WIX0200: The File element contains an unhandled extension element 'NativeImage'. Please ensure that the extension for elements in the 'http://wixtoolset.org/schemas/v4/wxs/netfx' namespace has been provided
调试时发现本地构建日志显示HeatWave VS插件的MSBuild扩展覆盖了CollectPackageReferences目标,而构建服务器无此插件,使用的是MSBuild默认目标:
Overriding target "CollectPackageReferences" in project "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\CommonExtensions\Microsoft\NuGet\NuGet.targets" with target "CollectPackageReferences" from project "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\MSBuild\FireGiant\HeatWave\FireGiant.HeatWave.PackageDependencyResolution.targets".
我存在以下疑问:
- 是否无需HeatWave即可在无插件机器上构建带扩展的项目?
- 构建是否依赖MSBuild扩展而非仅Wix4 SDK?
- 即使未使用harvest功能,是否需要在wixproj中添加WixToolset.Heat引用才能在构建服务器正常工作?
内容的提问来源于stack exchange,提问作者Anders Forsgren

