【问题标题】:WIX Toolset integrated into VS 2012 beginner problemsWIX 工具集集成到 VS 2012 初学者问题
【发布时间】:2013-03-26 09:39:00
【问题描述】:

我的公司最近强迫我们使用 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 进行操作的基本教程。我似乎不可能找到合适的。

【问题讨论】:

    标签: visual-studio-2012 wix votive


    【解决方案1】:

    WiX v3.6 及更高版本支持 VS2012。 WiX v4.0 几乎没有启动,目前不推荐使用。 v4.0 中出现了许多重大变化,所以现在坚持使用 v3.x 行。

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

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

    【讨论】:

    • 是否有任何用于收获输出的 MSBuild 任务?我想,我在网上看到过,但现在找不到了。
    【解决方案2】:

    当 v4.0.12 尚未发布时,不确定您是如何使用它的! :) Wix v3.8 是最新版本:http://wixtoolset.org/releases

    official documentation有很多指南,你也可以在tutorial找到很多信息。

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

    <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 版本,但我从这里得到它wixtoolset.org/releases/v4.0.12.0。可能仍然是测试版,但可能是唯一一个集成到 Visual Studio 2012 中的。我已经阅读了很多关于我的问题的内容,并认为 heat.exe 运行项目的依赖项,但不幸的是,事实并非如此。我会看看我是否应该选择另一个安装程序。再次感谢
    • WiX 3.7 还与 VS2012 集成。但这个时候还是需要这个答案。
    【解决方案3】:

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

    为了克服这个问题并让它在我的项目中插入新的 .dll 和其他依赖项并使其自动运行时也能长期持续,我做了以下操作。

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

    <!--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 目录中。

    更多信息: 我遵循了这个指南:

    Create a working Wix project.

    Easy way heat.exe.

    还建议阅读以了解flags 在您的命令中使用的内容。

    【讨论】:

      猜你喜欢
      • 2011-04-04
      • 2021-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多