要获取的目录的 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 构建提供了示例。
我正在开发一个新的安装程序(第一个使用 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 构建提供了示例。