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



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

我的问题如下。我有一个很大的解决方案,有许多项目,所有这些都导致一个exe文件,和几个dll。

然后在解决方案中创建一个Wix安装项目,并向生成exe文件的项目添加引用。在该项目参考的属性中,我设置了Harvest: trueProject Output Groups: Binaries

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

此外,如果我在引用的项目文件上运行heat.exe,我只得到文件的exe输出,而不是项目所依赖的dll。

我认为以上是非常标准的,并且wix工具应该能够为我收集这些信息。我真的很奇怪,为什么在网上广泛搜索后,找不到任何有类似问题的人。

如果有人知道上面的原因,请试着给我发一个关于如何使用WiX做事情的基本教程。

WiX v3.6及以后版本支持VS2012。WiX v4.0刚刚启动,不建议在这个时候使用。在v4.0中会有很多突破性的变化,所以坚持使用v3。

Votive的自动收集功能不全。这就是为什么它在默认情况下是禁用的。发现许多项目类型都打破了它。正如您所发现的,收集不会遍历多个项目引用。这些都需要更多的工作才能正常工作。

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

不知道你是如何使用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>

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

当我尝试为我的解决方案创建.msi安装时,我遇到了类似的问题。

为了克服这个问题,并使它长时间持续,即使当我插入新的。dll和其他依赖到我的项目,并使其自动,我做了以下。

在我的产品中。我有这个目录

<!--Here We Install Our Main App-->
<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ProgramFilesFolder">
    <Directory Id="INSTALLFOLDER" Name="MyAppDir"/>
  </Directory>
...
</Directory>

和在我的Wix项目-> properties -> Build events -> Pre - Build event命令行中,我添加了这个命令:

 "%wix%binheat" dir "$(SolutionDir)MainProjectbinDebug" -dr INSTALLFOLDER -scom -frag -srd -sreg -gg -cg Components  -var var.MainProject.TargetDir -o $(SolutionDir)MainProjectIncludedheat.wxs

一旦我构建了我的wix项目,它将创建一个Includedheat。我的MainProject目录下的wxs文件,列出了我的MainProjectbinDebug目录下的所有文件。

下一步-添加Includedheat。在wix项目中添加wxs,然后在特性部分添加:

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

现在,一旦我重新构建并安装。msi,所有驻留在我的MainProjectbinDebug目录中的内容也将包含在目标位置的MyAppDir目录中。

查看更多信息:我遵循以下指南:

创建一个工作的Wix项目。

Easy way heat.exe.

还建议阅读以确定在命令中使用哪些标志

相关内容

  • 没有找到相关文章

最新更新