要获取的目录的 WIX Heat PreBuild 变量名称

WIX Heat PreBuild Variable Name for Directory to Harvest

我正在开发一个新的安装程序(第一个使用 WiX 的)。我正在使用 Heat 从引用的项目解决方案中获取输出文件,并且它运行良好。问题是我在 heat 调用中使用了我的 harvest 目录的绝对路径,我想用一个变量(最好在 configuration.wxi 文件中)替换它,以便我正在使用的其他人可以快速更改其机器上的路径。这是我的热预构建事件调用:

call “$(WIX)bin\heat.exe” dir "C:\MyProjectPath\bin\Release" -dr APPLICATIONROOTDIRECTORY -cg ApplicationComponents -gg -g1 -scom -sreg -sfrag -srd -suid -var var.sourcePath -out “$(ProjectDir)Fragments\MainAppFiles.wxs”  -t $(ProjectDir)Transform.xslt

此语句有效,但如您所见,我在 dir 标记 之后有一个绝对路径,我想将其替换为变量名。我已经阅读了热标签的 documentation page 并且我尝试了许多其他方法来做到这一点(包括定义预处理器变量)但似乎没有任何效果。谁能指出我正确的方向?

有两种调用热过程的方法,在构建目标之前或在预构建事件中。

Prebuild 事件直接调用加热过程,以便自动生成 MyComponents.wxs 文件,如您上面所写。

在使用 "HeatDirectory" 或 "HarvestDirectory" 时,之前的构建目标执行相同的操作。

主要区别在于这个选项中哪个更适合您。命令行,如上所述,或 xml 样式,如:

<Target Name="BeforeBuild">
 <HarvestDirectory Include="$(SourceDir)">
    <DirectoryRefId>INSTALLDIR</DirectoryRefId>
    <ComponentGroupName>cmpMain</ComponentGroupName>
    <PreprocessorVariable>var.SourceDir</PreprocessorVariable>
    <SuppressUniqueIds>false</SuppressUniqueIds>
    <SuppressCom>true</SuppressCom>
    <SuppressRegistry>true</SuppressRegistry>
    <SuppressRootDirectory>true</SuppressRootDirectory>
    <KeepEmptyDirectories>false</KeepEmptyDirectories>
    <Transforms>DefaultTransform.xsl</Transforms>
 </HarvestDirectory>
</Target>

要使用 $(SourceDir),您可以将 属性 组定义为:

  <SourceDir Condition="Exists('$(TF_BUILD_BINARIESDIRECTORY)')">$(TF_BUILD_BINARIESDIRECTORY)\testfolder</SourceDir>
  <SourceDir Condition="!Exists('$(TF_BUILD_BINARIESDIRECTORY)')">$(MSBuildProjectDirectory)..\..\..\testfolder</SourceDir>

我已经为本地构建和 TFS 构建提供了示例。