要获取的目录的WIX Heat预构建变量名
我正在开发一个新的安装程序(第一个使用WiX)。我正在使用Heat从一个引用的项目解决方案中获取输出文件,我已经让它工作得很好了。问题是我在heat调用中使用了一个到我的harvest目录的绝对路径,我想用一个变量(最好是在configuration.wxi文件中)来替换它,以便我正在使用的其他人可以快速更改他们机器上的路径。以下是我的热预装活动电话:要获取的目录的WIX Heat预构建变量名,wix,heat,Wix,Heat,我正在开发一个新的安装程序(第一个使用WiX)。我正在使用Heat从一个引用的项目解决方案中获取输出文件,我已经让它工作得很好了。问题是我在heat调用中使用了一个到我的harvest目录的绝对路径,我想用一个变量(最好是在configuration.wxi文件中)来替换它,以便我正在使用的其他人可以快速更改他们机器上的路径。以下是我的热预装活动电话: call “$(WIX)bin\heat.exe” dir "C:\MyProjectPath\bin\Release" -dr APPLICA
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标记后面有一个绝对路径,我想用一个变量名替换它。我已经阅读了for heat标签,并尝试了许多其他方法(包括定义预处理器变量),但似乎没有任何效果。有人能给我指出正确的方向吗?有两种方法可以调用heat-process,在构建前目标或预构建事件中 Prebuild事件直接调用heat进程,以便自动生成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>
INSTALLDIR
cmpMain
变量SourceDir
假的
真的
真的
真的
假的
DefaultTransform.xsl
要使用$(SourceDir),可以将属性组定义为:
<SourceDir Condition="Exists('$(TF_BUILD_BINARIESDIRECTORY)')">$(TF_BUILD_BINARIESDIRECTORY)\testfolder</SourceDir>
<SourceDir Condition="!Exists('$(TF_BUILD_BINARIESDIRECTORY)')">$(MSBuildProjectDirectory)..\..\..\testfolder</SourceDir>
$(TF\u BUILD\u BINARIESDIRECTORY)\testfolder
$(MSBuildProjectDirectory)\\\..\testfolder
我已经给出了本地构建和TFS构建的示例。有两种方法可以调用热处理过程,在构建前目标或预构建事件中 Prebuild事件直接调用heat进程,以便自动生成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>
INSTALLDIR
cmpMain
变量SourceDir
假的
真的
真的
真的
假的
DefaultTransform.xsl
要使用$(SourceDir),可以将属性组定义为:
<SourceDir Condition="Exists('$(TF_BUILD_BINARIESDIRECTORY)')">$(TF_BUILD_BINARIESDIRECTORY)\testfolder</SourceDir>
<SourceDir Condition="!Exists('$(TF_BUILD_BINARIESDIRECTORY)')">$(MSBuildProjectDirectory)..\..\..\testfolder</SourceDir>
$(TF\u BUILD\u BINARIESDIRECTORY)\testfolder
$(MSBuildProjectDirectory)\\\..\testfolder
我已经给出了本地生成和TFS生成的示例。您将此调用定位在何处,是直接在VS中的项目预生成文件中,还是在项目文件中手动执行?这位于项目属性下的预生成事件命令行中。到底是什么问题?使用环境变量不应该是个问题。我刚刚用$(SolutionDir)完成了,它成功了。谢谢hbulens!我不知道为什么我没有想到使用SolutionDir。我试图从另一个项目中获取一个bin目录,但是SolutionDir基本上把我带到了根目录,这将很好地工作。谢谢。您在哪里找到了此调用?是直接在VS中的项目预生成文件中,还是在项目文件中手动执行此调用?这是在项目属性下的预生成事件命令行中。到底是什么问题?使用环境变量不应该是个问题。我刚刚用$(SolutionDir)完成了,它成功了。谢谢hbulens!我不知道为什么我没有想到使用SolutionDir。我试图从另一个项目中获取一个bin目录,但是SolutionDir基本上把我带到了根目录,这将很好地工作。谢谢