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 2012 WIX工具集集成到VS 2012初学者问题中_Visual Studio 2012_Wix_Votive - Fatal编程技术网

Visual studio 2012 WIX工具集集成到VS 2012初学者问题中

Visual studio 2012 WIX工具集集成到VS 2012初学者问题中,visual-studio-2012,wix,votive,Visual Studio 2012,Wix,Votive,我的公司最近强迫我们使用Wix工具集(v.4.0.12),因为我们升级到Visual Studio 2012,不幸的是,它不再包含安装程序项目 我的问题如下。我有一个很大的解决方案,有很多项目,它们都会产生一个exe文件和几个DLL 然后,我在解决方案中创建一个Wix安装项目,并添加对生成exe文件的项目的引用。在该项目引用的属性中,我设置了Harvest:true和项目输出组:Binaries 我希望WiX项目的构建能够从被引用的项目中获取依赖项,这样我就不需要手动添加引用,因为这会给我更多的

我的公司最近强迫我们使用Wix工具集(v.4.0.12),因为我们升级到Visual Studio 2012,不幸的是,它不再包含安装程序项目

我的问题如下。我有一个很大的解决方案,有很多项目,它们都会产生一个exe文件和几个DLL

然后,我在解决方案中创建一个Wix安装项目,并添加对生成exe文件的项目的引用。在该项目引用的属性中,我设置了
Harvest:true
项目输出组:Binaries

我希望WiX项目的构建能够从被引用的项目中获取依赖项,这样我就不需要手动添加引用,因为这会给我更多的维护

此外,如果对引用的项目文件运行
heat.exe
,则只会获得文件的exe输出,而不会获得项目所依赖的DLL

我假设以上内容是相当标准的,wix工具应该能够为我收集这些信息。我真的很想知道,为什么在网上广泛搜索后,却找不到任何有类似问题的人


如果有人知道上述原因,请尝试向我发送一份关于如何使用WiX的基本教程。我似乎不可能找到合适的版本。

当v4.0.12还没有推出时,我不确定您是如何使用它的!:)Wix v3.8是最新版本:

中有大量的指南,您也可以在中找到相当多的信息

但是,对于您的特定情况,您需要手动将每个项目的输出及其依赖项包含到安装程序中,因为还不支持自动采集:

<Component>
    <File Id="ProjectA.Output"
          Name="$(var.ProjectA.TargetFileName)"
          Source="$(var.ProjectA.TargetPath)"
          KeyPath="yes" />
</Component>

<Component>
    <File Id="ProjectA.NlogDependancy"
          Name="NLog.dll"
          Source="$(var.ProjectA.TargetDir)\Nlog.dll"
          KeyPath="yes" />
</Component>

<Component>
    <File Id="ProjectB.Output"
          Name="$(var.ProjectB.TargetFileName)"
          Source="$(var.ProjectB.TargetPath)"
          KeyPath="yes" />
</Component>

<Component>
    <File Id="ProjectB.AutofacDependancy"
          Name="Autofac.dll"
          Source="$(var.ProjectB.TargetDir)\Autofac.dll"
          KeyPath="yes" />
</Component>


这并不是很难做到,除非您有几百个二进制文件,否则不会花费太长时间。

WiX v3.6及更高版本支持VS2012。WiX v4.0刚刚启动,目前不推荐使用。v4.0中有很多突破性的变化,所以现在请继续使用v3.x版本

“还愿”中的自动收割功能未完全发挥作用。这就是它在默认情况下被禁用的原因。发现许多项目类型正在破坏它。正如您所发现的,收获不会遍历多个项目引用。所有需要更多工作才能正常工作的东西


同时,您可以在
组件
元素中列出
文件
元素。

我在尝试创建解决方案的.msi安装时遇到类似问题

为了克服这个问题,并使它长期持续,即使在我向我的项目插入新的.dll和其他依赖项时,并使其自动化,我做了以下操作

在我的Product.wxs中,我有一个“目录”

构建wix项目后,它将在MainProject目录中创建Includedheat.wxs文件,其中列出MainProject\bin\Debug目录中的所有文件

下一步-将Includedheat.wxs添加到wix项目中,然后在我的功能部分添加:

<!--Add Component-->
<Feature Id="MainApplication" Title="Main Application" Level="1">
...
<ComponentGroupRef Id="Components" />
</Feature>

...
现在,一旦重建并安装.msi,驻留在MainProject\bin\Debug目录中的所有内容也将包含在目标位置的MyAppDir目录中

有关更多信息: 我遵循以下指南:


还建议阅读以确定在命令中使用的内容。

Hi。谢谢你的回复。有趣的是,4.0.12版没有列出,但我从这里得到了它。可能仍然是beta版,但可能是唯一一个集成到VisualStudio2012中的版本。我读了很多关于我的问题的书,认为heat.exe运行项目的依赖项,但不幸的是,事实并非如此。我会看看我是否应该选择另一个安装程序。感谢againWiX 3.7还集成了VS2012。但此时仍然需要此答案。是否有用于获取输出的MSBuild任务?我想,我在网上看到了什么地方,但现在找不到了。
 "%wix%\bin\heat" dir "$(SolutionDir)MainProject\bin\Debug" -dr INSTALLFOLDER -scom -frag -srd -sreg -gg -cg Components  -var var.MainProject.TargetDir -o $(SolutionDir)MainProject\Includedheat.wxs
<!--Add Component-->
<Feature Id="MainApplication" Title="Main Application" Level="1">
...
<ComponentGroupRef Id="Components" />
</Feature>