bpe*_*kes 4 wix nuget nuget-package visual-studio-2013 nuget-package-restore
我有一个包含WIX项目的解决方案.我几个月前通过NuGet添加了WIX,它的版本是3.8.1128.0当我在开发过程中构建时,一切正常.
当我准备发布时,我在SVN中分支文件夹,然后将分支拉到我的开发机器.当我在分支中打开解决方案时,它无法打开WIX项目.(它在项目旁边说"(加载失败)".
当我尝试从VS重新加载项目时,我收到错误
找不到导入的项目"c:\ Projects\xxxxx\yyyyy\SolutionName\packages\WiX.Toolset.3.8.1128.0\tools\wix\wwix.targets".确认<Import>声明中的路径是正确的,并且该文件存在于磁盘上.
我试图添加Wix Toolset (unofficial)
NuGet包,但是当我进入解决方案的Manage NuGet包的"在线"选项卡时,我只看到3.9.1208.0版本.
目标是将包含二进制和wix msi包的项目的解决方案放到构建服务器上,但如果我不能依赖NuGet来安装WiX,我不知道如何在另一个上安装它.机.
查看WiX Toolset NuGet包,它会修改WiX MSBuild文件的路径,以便C:\Program Files\WiX
在计算机上安装WiX时,从NuGet包中使用MSBuild文件,而不是使用它们.项目文件的相关部分如下所示:
<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)" />
Run Code Online (Sandbox Code Playgroud)
由于这是一个WiX项目文件,因此Import元素没有检查WiXTargetsPath是否存在的条件,因此如果缺少Wix.targets文件,Visual Studio将无法加载项目.不幸的是,添加一个条件,如下所示,同时允许Visual Studio加载项目不会修复构建.
<Import Project="$(WixTargetsPath)" Condition="Exists($(WixTargetsPath))"/>
Run Code Online (Sandbox Code Playgroud)
根据项目文件中的上述条件,构建项目的Visual Studio将自动恢复WiX NuGet包,如果您安装了最新版本的NuGet,但仍然会收到有关WiX项目缺少Build目标的构建错误.只有在恢复WiX NuGet包后再次关闭并重新打开解决方案,才能解决此构建错误.
在构建服务器上,我将创建一个预构建步骤,在构建WiX项目之前使用NuGet.exe还原来恢复NuGet包:
NuGet.exe restore path\to\the\solution\yoursolution.sln
Run Code Online (Sandbox Code Playgroud)
这将恢复WiX包.然后,您可以构建WiX项目,而不会出现有关丢失WiX目标文件的任何错误.
另一种方法是将packages目录检入源代码控制.但是,这会将二进制文件添加到源控件中,您可能不想这样做.
另外WiX.Toolset.3.8.1128.0可从nuget.org获得,但NuGet对话框将显示最新版本.您可以使用程序包管理器控制台安装特定版本的NuGet程序包.当NuGet 3.0发布时,您应该可以从NuGet对话框中执行相同的操作.
归档时间: |
|
查看次数: |
2727 次 |
最近记录: |