Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
要获取的目录的WIX Heat预构建变量名_Wix_Heat - Fatal编程技术网

要获取的目录的WIX Heat预构建变量名

要获取的目录的WIX Heat预构建变量名,wix,heat,Wix,Heat,我正在开发一个新的安装程序(第一个使用WiX)。我正在使用Heat从一个引用的项目解决方案中获取输出文件,我已经让它工作得很好了。问题是我在heat调用中使用了一个到我的harvest目录的绝对路径,我想用一个变量(最好是在configuration.wxi文件中)来替换它,以便我正在使用的其他人可以快速更改他们机器上的路径。以下是我的热预装活动电话: call “$(WIX)bin\heat.exe” dir "C:\MyProjectPath\bin\Release" -dr APPLICA

我正在开发一个新的安装程序(第一个使用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标记后面有一个绝对路径,我想用一个变量名替换它。我已经阅读了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基本上把我带到了根目录,这将很好地工作。谢谢