Wix 4 PackageReference 未解析为 Extensions

问题描述 投票:0回答:0

编辑:这是通过使用“dotnet build [wixproj]”而不是 msbuild 解决的,但我会暂时将问题留在这里,因为我很好奇我是否误解了它应该如何工作。我不认为 HeatWave 会在命令行 msbuild 中发挥作用

我有一个 wix 4 项目,其中包含以下部分对扩展的包引用:

<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>

我不是 100% 熟悉它在引擎盖下的工作原理,但是当我使用

msbuild 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

但是,当我尝试在另一台机器(构建服务器)上执行此操作时,到达构建步骤时没有@(扩展)。 @(WixExtension) 项目永远不会被填充。相关日志

Target "ResolveWixExtensionReferences" skipped, due to false condition; ( '@(WixExtension)' != '') was evaluated as ( '' != ''). 

因此构建将失败,因为扩展不可用,例如

错误 WIX0200:文件元素包含未处理的扩展元素“NativeImage”。请确保已提供“http://wixtoolset.org/schemas/v4/wxs/netfx”命名空间中元素的扩展

尝试调试时,我在工作构建的日志中注意到这一点:它使用不同的方法收集包引用,这似乎来自 HeatWave VS 插件添加的 msbuild 扩展。但是此插件在构建服务器上不可用,因此日志中也没有此消息。它使用那里的 msbuild 的默认 CollectPackageReferences 目标。

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 本身?我是否需要将对 WixToolset.Heat 的引用添加到 wixproj 以使其在构建服务器上运行,即使没有使用实际的收获?

wix wix4
© www.soinside.com 2019 - 2024. All rights reserved.