WIX Toolset集成到VS 2012初学者问题

7
我公司最近强制我们使用Wix Toolset(v.4.0.12),因为我们升级到的Visual Studio 2012不再包含安装程序项目,这与IT技术有关。
我的问题如下。我有一个大型解决方案,其中有许多项目,总之会生成一个exe文件和几个dll文件。
然后,我在解决方案中创建了一个WiX安装程序项目,并添加了对生成exe文件的项目的引用。在该项目引用的属性中,我设置了“Harvest:true”和“Project Output Groups:Binaries”。
我希望WiX项目构建能够收集从引用项目中获取的依赖项,这样我就不需要手动添加引用,因为那会增加更多维护工作。
此外,如果我在引用的项目文件上运行heat.exe,我只会得到文件的exe输出,而不是该项目所依赖的dll文件。
我认为上述情况相当标准,wix工具应该能够为我收集这些信息。但我真的很想知道为什么在广泛搜索网络后,找不到任何遇到类似问题的人。
如果有人知道以上信息,请尽量向我发送基本的WiX操作教程。我似乎无法找到合适的教程。
3个回答

8

WiX v3.6及以上版本支持VS2012。WiX v4.0几乎没有开始,目前不建议使用。v4.0中会有许多重大变化,因此现在请使用v3.x系列。

Votive中的自动收集功能不是完全功能。这就是为什么它默认情况下被禁用的原因。发现许多项目类型都会破坏它。如您所发现,该收集功能无法浏览多个项目引用。所有这些需要更多的工作才能正常工作。

同时,您可以在Component元素中列出File元素。


有没有用于收集输出的MSBuild任务?我记得在网络上见过,但现在找不到了。 - Farrukh Waheed

2
不确定您如何使用尚未发布的v4.0.12版本! :) Wix v3.8是最新版本:http://wixtoolset.org/releases。在官方文档中有很多指南,您也可以在教程中找到相当多的信息。但是,针对您的具体情况,您需要手动将每个项目及其依赖项的输出包含到安装程序中,因为自动收集尚未得到支持。
<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>

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


你好。感谢您的回复。有趣的是版本4.0.12没有列出,但我从这里得到了它http://wixtoolset.org/releases/v4.0.12.0。可能仍然处于测试版,但大概是唯一集成在Visual Studio 2012中的版本。我已经阅读了很多关于我的问题的内容,并以为heat.exe运行一个项目的依赖项,但不幸的是情况并非如此。我将看看是否应该选择另一个安装程序。再次感谢。 - Jihad Haddad
WiX 3.7还与VS2012集成。但此时仍需要这个答案。 - Jesse Chisholm

1
我曾经尝试创建我的解决方案的.msi安装时遇到了类似的问题。
为了解决这个问题并使其在将新的.dll和其他依赖项插入我的项目时长时间持续并自动化,我进行了以下操作。
在我的Product.wxs中,我有这个“Directory”。
<!--Here We Install Our Main App-->
<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ProgramFilesFolder">
    <Directory Id="INSTALLFOLDER" Name="MyAppDir"/>
  </Directory>
...
</Directory>

在我的Wix项目中,通过属性 -> 构建事件 -> 预构建事件命令行,在其中添加了以下命令:
 "%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

一旦我构建我的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目录中。
更多信息:
我遵循了这些指南: 创建一个可工作的Wix项目。 使用heat.exe的简单方法。 还建议阅读以确定在命令中使用哪些标志

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接