查看 WiX 工具集 NuGet 包,它会修改 WiX MSBuild 文件的路径,以便从 NuGet 包中使用 MSBuild 文件,而不是在机器上安装 WiX 时使用它们所在的C:\Program Files\WiX。项目文件的相关部分如下所示:
<PropertyGroup>
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsoft\WiX\v3.x\Wix.targets</WixTargetsPath>
</PropertyGroup>
<PropertyGroup>
<WixToolPath>$(SolutionDir)packages\WiX.Toolset.3.8.1128.0\tools\wix\ </WixToolPath>
<WixTargetsPath>$(WixToolPath)wix.targets</WixTargetsPath>
<WixTasksPath>$(WixToolPath)WixTasks.dll</WixTasksPath>
</PropertyGroup>
<Import Project="$(WixTargetsPath)" />
由于这是一个 WiX 项目文件,因此 Import 元素没有检查 WiXTargetsPath 是否存在的条件,因此如果 Wix.targets 文件丢失,Visual Studio 将无法加载项目。不幸的是,添加一个条件,如下所示,同时允许 Visual Studio 加载项目并不能修复构建。
<Import Project="$(WixTargetsPath)" Condition="Exists($(WixTargetsPath))"/>
如果项目文件中存在上述条件,那么在构建项目时 Visual Studio 将自动恢复 WiX NuGet 包,如果您安装了最新版本的 NuGet,但您仍然会收到有关缺少构建目标的构建错误维克斯项目。此构建错误只能通过在恢复 WiX NuGet 包后再次关闭并重新打开解决方案来修复。
在构建服务器上,我将创建一个预构建步骤,在构建 WiX 项目之前使用 NuGet.exe restore 来恢复 NuGet 包:
NuGet.exe restore path\to\the\solution\yoursolution.sln
这将恢复 WiX 包。然后,您可以构建 WiX 项目,而不会出现任何关于缺少 WiX 目标文件的错误。
另一种方法是将包目录签入源代码管理。但是,这会将二进制文件添加到您可能不想做的源代码管理中。
WiX.Toolset.3.8.1128.0 也可从 nuget.org 获得,但 NuGet 对话框将显示最新版本。您可以使用包管理器控制台安装特定版本的 NuGet 包。当 NuGet 3.0 发布时,您应该能够从 NuGet 对话框执行相同的操作。