msbuild - 基于要在MSBUILD中使用的用户定义目录创建wix片段文件的最佳方法

标签 msbuild wix wix3

本着Si提出的这个问题的精神:WiX tricks and tips。我正在尝试确定基于目录创建wix片段的最佳方法。可以这么说,文件收集。例如,在bin\release文件夹下,我可以有许多不同的文件夹以及一些我想非常容易地捕获为片段的文件。我一直在通过键入它们或使用wixedit来做到这一点。

请注意,我在这里没有做过任何尝试研究的任何事情:
我读了一点热。(http://installing.blogspot.com/2006/04/heatexe-making-setup-easier.html)我不确定从msbuild运行它吗?
B)我从Newagesolution找到了这篇博客文章,其中讨论了如何使用t4脚本:http://blog.newagesolution.net/2008/06/how-to-use-msbuild-and-wix-to-msi.html

我想知道其他人正在解决这个问题。

问候,布莱恩

最佳答案

好的,丹尼尔(Daniel)我绝对同意使用热量,但是我认为罗伯(Rob)为我最终使用的热量指明了正确的方向。

我最终使用的是HeatDirectory。(请注意,我不打算进行修补。如果您想进行修补,则可能要看另一种解决方案,但是Heat/heat目录可以用于修补。)不幸的是,Rob的回答是非常有限,所以我不会说他真的回答了我的问题。只是指出了我正确的方向。感谢Rob和Daniel的帮助。

因此,我回来并亲自回答了这个问题。

跨栏...

跨栏1
我遇到了网上几乎没有文档有关如何从Visual Studio中实现加热任务/加热目录(包装在msbuild中的加热文件)的问题。请注意,从msbuild运行的包装器似乎很新,我不承担使用该包装器的风险,等等。由于缺少文档,我向wix用户列表发送了一封电子邮件。我得到了Brian Rogers的帮助。谢谢Brian,这为我解决了所有问题。看看他在此处的出色博客文章,以更好地了解热量将如何帮助您实现自动化:http://icumove.spaces.live.com/blog/cns!FB93073C6534B681!461.entry

跨栏2
在加热之后,我发现我没有按照推荐的方式使用组件,但是我不得不将所有的推理组合在一起。如果您不具备Windows Installer的知识,我想很多人会在使用Wix的初期就遇到这个问题。因此,我建议您阅读:
如果您是像Windows Installer那样的新手,请确保也阅读了组件规则。来自MS:http://msdn.microsoft.com/en-us/library/aa370561.aspx的组件规则。请阅读Rob Mensching的这些内容,以更好地理解码件:http://robmensching.com/blog/posts/2003/10/4/Windows-Installer-Components-Introduction
http://robmensching.com/blog/posts/2003/10/18/Component-Rules-101
对于Windows安装程序上的额外阅读,请从Windows安装程序团队检查以下规则(规则16:遵循组件规则):
http://blogs.msdn.com/windows_installer_team/archive/2006/05/12/595950.aspx

跨栏3
您必须决定是否要在每次安装新版本时进行文件修补或升级。
幸运的是,我不需要进行修补,因此对于每次升级,我都将像这样卸载以前的版本:How to implement WiX installer upgrade?
这大大简化了事情。修补时,您将需要完全控制所有内容。当您希望由许多不了解wix的开发人员(除了wix生成msi字段)来进行自动化/自动构建时,要进行一些困难的工作就更加困难了。看起来这可以通过加热来工作,但我不确定。

跨栏4
对我来说,花了一些时间才弄清楚为什么带有我的预处理程序变量的包含文件不起作用。我终于弄明白了。您必须将文件包括在您的.wxs文件中,如下所示:
请参阅此处以获取更多详细信息:
Include a text file content into a WiX script

http://wix.sourceforge.net/manual-wix2/preprocessor.htm

跨栏5
由于我正在使用带有混合的主要升级,因此我想将颠覆引入我的产品编号中。我认为这很简单,那就是您是否知道该怎么做。我在这里遇到麻烦,也必须为此寻求帮助。

跨栏6
通过热更新基于bin文件夹的文件,一切都可以很好地工作。好吧,几乎是自动的,如果dll引用中存在任何冲突,等等,则文件将不会包含在安装程序中,因此,某些程序可能无法正常运行。您需要有一个测试过程,以便在安装后测试程序。如果您错过了一个dll,这可能很关键。我还建议您跟踪该程序使用的dll,并与msi文件进行比较。

现在使用HeatDirectory(在Brian Rogers(wix团队的帮助下)帮助下)解决方案:

 <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == ''">Debug</Configuration>
   <OutputName>msbuild.heatfile</OutputName>
   <OutputType>Package</OutputType>
   <WixToolPath>..\..\YourHeatDir</WixToolPath>
   <WixToolPath>$(WixToolPath)</WixToolPath>
   <Cultures>en-us</Cultures>
   <LinkerBaseInputPaths>..\..\data\HeatDir</LinkerBaseInputPaths>
 </PropertyGroup>
 <ItemGroup>
   <Compile Include="product.wxs" />
   <Compile Include="TestDir.wxs" />
 </ItemGroup>
 <Import Project="$(WixToolPath)\Wix.targets" />
 <UsingTask TaskName="HeatDirectory"
   AssemblyFile="$(WixToolPath)WixUtilExtension.dll" />
 <Target Name="BeforeBuild">
   <HeatDirectory
      Directory="..\..\data\HeatDir"
      DirectoryRefId="DataDir"
      OutputFile="TestDir.wxs"
      AutogenerateGuids="true"
      ToolPath="$(WixToolPath)" />
 </Target>

这需要粘贴到您的项目文件中,并且需要更改适当的设置/路径。要做的是获取您指定路径中的所有文件
并创建一个TestDir.wxs文件,然后您可以按组件组进行引用。有几个Heatdirectory选项,您需要查看热源代码以了解详细信息。

仅供引用:我在发布问题后发现了这个关于stackoverflow的帖子:How to add a whole directory or project output to WiX package
作为引用,我在这里看到了这篇文章:Harvesting a .csproj with heat.exe in Visual Studio 2008 and WiX(v3)。同样,这可以使用加热任务来完成。
两者都讨论使用第三方工具。一个叫锦葵,另一个叫石蜡。我认为石蜡看起来很受支持,几乎可以完成热能。
有一些附加内容:有关详细信息,请参见此处:http://www.wintellect.com/cs/blogs/jrobbins/archive/2007/10/18/wix-hints-for-new-users-part-1-of-3.aspx

无论如何希望这对其他人有帮助。

关于msbuild - 基于要在MSBUILD中使用的用户定义目录创建wix片段文件的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/710687/

相关文章:

c# - TeamCity (linux) 服务器和 MSBuild

wix - 未执行自定义操作

Wix 在卸载时启动应用程序

visual-studio - 如何从 .proj 文件制作 visual studio 解决方案文件

msbuild - 如何将 MSBuild .proj 文件添加到我的解决方案中?

windows-services - Wix:卸载时停止 Windows 服务

wix - 如何结合 Heat 创建 Wix 补丁?

wix - 在wix中控制快捷方式顺序

batch-file - VS2015/MsBuild/vsvars32.bat : Cannot determine the location of the VS installation

Wix 安装 - 使用 Burn 来管理 UI 并显示与内置对话框相同的进度文本