Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2013 将NuGet与WIX一起使用不会';建筑释放时不工作_Visual Studio 2013_Wix_Nuget_Nuget Package_Nuget Package Restore - Fatal编程技术网

Visual studio 2013 将NuGet与WIX一起使用不会';建筑释放时不工作

Visual studio 2013 将NuGet与WIX一起使用不会';建筑释放时不工作,visual-studio-2013,wix,nuget,nuget-package,nuget-package-restore,Visual Studio 2013,Wix,Nuget,Nuget Package,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项目的解决方案。几个月前,我通过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” 未找到。请确认声明中的路径为 正确,并且该文件存在于磁盘上

我曾尝试添加
Wix工具集(非官方)
NuGet软件包,但当我转到解决方案的Manage NuGet软件包的“Online”选项卡时,我只看到了3.9.1208.0版本


目标是将包含二进制和wix msi包的项目的解决方案安装到生成服务器上,但是如果我不能依靠NuGet安装wix,我不知道如何在另一台机器上进行设置。

查看wix工具集NuGet包,它会修改wix MSBuild文件的路径,以便MSBuildles是从NuGet软件包中使用的,而不是在机器上安装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包。然后您可以构建WiX项目,而不会出现任何关于缺少WiX目标文件的错误

另一种方法是将packages目录签入到源代码管理中。但是,这将向源代码管理中添加二进制文件,而您可能不希望这样做


另外,WiX.Toolset.3.8.1128.0也可从nuget.org获得,但nuget对话框将显示最新版本。您可以使用软件包管理器控制台安装特定版本的nuget软件包。当nuget 3.0发布后,您应该能够从nuget对话框执行相同的操作。

nuget将自动恢复nuget软件包,如果您需要的话在Visual Studio中生成它们。在生成服务器上不会这样做。对于生成服务器,您需要运行预生成步骤或使用不推荐的“启用包还原”,以便还原包。这适用于大多数NuGe t包。WiX one似乎是一种特殊情况,因为生成目标文件用于定义项目build信息,而不仅仅是扩展现有的目标文件。WiX NuGet包使项目自包含,因此您不必在计算机(开发人员或构建服务器)上单独安装WiX。通常,使用NuGet,您只需在另一台计算机上打开解决方案,一切都会正常工作。问题在于WiX NuGet软件包和WiX项目。WiX NuGet软件包试图覆盖单独安装的WiX.targets文件。由于这定义了项目,因此会导致Visual Studio出现问题。其他NuGet软件包将自定义MSBuild目标文件添加到项目中,NuGet restore将处理这些文件而不会出现任何错误。此问题特定于WiX NuGet包。具体而言,任何定义项目MSBuild目标的NuGet包都会出现此问题。问题是,为了知道要还原哪些包,Visual Studio必须加载所有e项目文件。如果项目文件依赖于必须由NuGet安装的.target文件,则项目将无法加载,但NuGet软件包仍将下载。既然有了.targets文件,下次启动Visual Studio时,它应该可以正常工作。这就是Matt Ward建议使用“引导”脚本加载NuGet pac的原因在你开始VisualStudio之前,kages。令人惊讶的是,5年后这个解决方案仍然有效!
  <Import Project="$(WixTargetsPath)" Condition="Exists($(WixTargetsPath))"/>
NuGet.exe restore path\to\the\solution\yoursolution.sln