如何在 DefineConstants 中基于您的构建版本放置变量以使用 HeatDirectory 进行收获?
How to put a variable base on your build version in DefineConstants for a Harvest with HeatDirectory?
我需要在 Wix 工具集上获取一个目录,但该目录的名称将包含构建版本号。
我知道如何定义静态常量,但是否可以将变量设为一个?
我在论坛上搜索过,没有找到基于外部变量的收获
<PropertyGroup>
<DefineConstants>BasePath=..\Files$(build);</DefineConstants>
</PropertyGroup>
<HeatDirectory
OutputFile="HarvestedCopyFiles.wxs"
DirectoryRefId="INSTALLFOLDER"
ComponentGroupName="HarvestedCopyFilesComponent"
SuppressCom="true"
Directory="..\Files"
SuppressFragments="true"
SuppressRegistry="true"
SuppressRootDirectory="true"
AutoGenerateGuids="false"
GenerateGuidsNow="true"
ToolPath="$(WixToolPath)"
PreprocessorVariable="var.BasePath" />
我该怎么做才能使这种 $(build)
变量起作用?
有没有办法将它 link 放到我的 variable.wxi
文件中,我得到了:<?define ProjectBuild = "421" ?>
?
您可以通过将 BeforeBuild 目标添加到您的 wixproj 文件来执行类似的操作:
<Target Name="BeforeBuild">
<ItemGroup>
<FileThatExists Include="..\Files\**\FileThatExists.txt"/>
</ItemGroup>
<PropertyGroup>
<Build>@(FileThatExists->'%(RecursiveDir)')</Build>
<BasePath>..\Files$(Build)\</BasePath>
<DefineConstants>
$(DefineConstants);
Build=$(Build);
BasePath=$(BasePath);
</DefineConstants>
</PropertyGroup>
<HeatDirectory
OutputFile="HarvestedCopyFiles.wxs"
DirectoryRefId="INSTALLFOLDER"
ComponentGroupName="HarvestedCopyFilesComponent"
SuppressCom="true"
Directory="$(BasePath)"
SuppressFragments="true"
SuppressRegistry="true"
SuppressRootDirectory="true"
AutoGenerateGuids="false"
GenerateGuidsNow="true"
ToolPath="$(WixToolPath)"
PreprocessorVariable="var.BasePath"
/>
</Target>
它的作用是通过巧妙地使用 ItemGroup 元数据属性来计算构建文件夹的 #。您也可以创建另一个目标来获取该文件夹名称,您应该能够在 SO 上找到一些示例。
我们将 Build 属性 值设置为我们创建的项目的 RecursiveDir 元数据,然后还定义了 BasePath 值。
接下来我们更新 DefineConstants 属性 中包含的值。这是 属性 可以让您将变量键值对传递给 Candle wix 编译器,它可以让您在安装程序源中使用 $(var.Build) 和 $(var.BasePath) 等语法代码。
最后我们调用 HeatDirectory 任务,它将收集您的 build# 文件夹并生成 HarvestedCopyFiles.wxs 文件。
我想建议定义项目 "HarvestDirectory",如果存在一个或多个 HarvestDirectory 项目,HarvestDirectory 目标将使用该项目 运行。
要做到这一点,您只需将 <HeatDirectory>
替换为
<PropertyGroup>
<HarvestDirectoryAutogenerateGuids>true</HarvestDirectoryAutogenerateGuids>
<HarvestDirectoryGenerateGuidsNow>true</HarvestDirectoryGenerateGuidsNow>
</PropertyGroup>
<ItemGroup>
<HarvestDirectory Include="$(BasePath)">
DirectoryRefId="INSTALLFOLDER"
ComponentGroupName="HarvestedCopyFilesComponent"
PreprocessorVariable="var.BasePath"
SuppressCom="true"
SuppressRegistry="true"
SuppressRootDirectory="true"
</HarvestDirectory>
</ItemGroup>
我更喜欢这种方法,因为它会自动将生成的文件包含在您的编译源中,因此您不必在项目中包含不存在的文件。
我需要在 Wix 工具集上获取一个目录,但该目录的名称将包含构建版本号。 我知道如何定义静态常量,但是否可以将变量设为一个?
我在论坛上搜索过,没有找到基于外部变量的收获
<PropertyGroup>
<DefineConstants>BasePath=..\Files$(build);</DefineConstants>
</PropertyGroup>
<HeatDirectory
OutputFile="HarvestedCopyFiles.wxs"
DirectoryRefId="INSTALLFOLDER"
ComponentGroupName="HarvestedCopyFilesComponent"
SuppressCom="true"
Directory="..\Files"
SuppressFragments="true"
SuppressRegistry="true"
SuppressRootDirectory="true"
AutoGenerateGuids="false"
GenerateGuidsNow="true"
ToolPath="$(WixToolPath)"
PreprocessorVariable="var.BasePath" />
我该怎么做才能使这种 $(build)
变量起作用?
有没有办法将它 link 放到我的 variable.wxi
文件中,我得到了:<?define ProjectBuild = "421" ?>
?
您可以通过将 BeforeBuild 目标添加到您的 wixproj 文件来执行类似的操作:
<Target Name="BeforeBuild">
<ItemGroup>
<FileThatExists Include="..\Files\**\FileThatExists.txt"/>
</ItemGroup>
<PropertyGroup>
<Build>@(FileThatExists->'%(RecursiveDir)')</Build>
<BasePath>..\Files$(Build)\</BasePath>
<DefineConstants>
$(DefineConstants);
Build=$(Build);
BasePath=$(BasePath);
</DefineConstants>
</PropertyGroup>
<HeatDirectory
OutputFile="HarvestedCopyFiles.wxs"
DirectoryRefId="INSTALLFOLDER"
ComponentGroupName="HarvestedCopyFilesComponent"
SuppressCom="true"
Directory="$(BasePath)"
SuppressFragments="true"
SuppressRegistry="true"
SuppressRootDirectory="true"
AutoGenerateGuids="false"
GenerateGuidsNow="true"
ToolPath="$(WixToolPath)"
PreprocessorVariable="var.BasePath"
/>
</Target>
它的作用是通过巧妙地使用 ItemGroup 元数据属性来计算构建文件夹的 #。您也可以创建另一个目标来获取该文件夹名称,您应该能够在 SO 上找到一些示例。
我们将 Build 属性 值设置为我们创建的项目的 RecursiveDir 元数据,然后还定义了 BasePath 值。
接下来我们更新 DefineConstants 属性 中包含的值。这是 属性 可以让您将变量键值对传递给 Candle wix 编译器,它可以让您在安装程序源中使用 $(var.Build) 和 $(var.BasePath) 等语法代码。
最后我们调用 HeatDirectory 任务,它将收集您的 build# 文件夹并生成 HarvestedCopyFiles.wxs 文件。
我想建议定义项目 "HarvestDirectory",如果存在一个或多个 HarvestDirectory 项目,HarvestDirectory 目标将使用该项目 运行。
要做到这一点,您只需将 <HeatDirectory>
替换为
<PropertyGroup>
<HarvestDirectoryAutogenerateGuids>true</HarvestDirectoryAutogenerateGuids>
<HarvestDirectoryGenerateGuidsNow>true</HarvestDirectoryGenerateGuidsNow>
</PropertyGroup>
<ItemGroup>
<HarvestDirectory Include="$(BasePath)">
DirectoryRefId="INSTALLFOLDER"
ComponentGroupName="HarvestedCopyFilesComponent"
PreprocessorVariable="var.BasePath"
SuppressCom="true"
SuppressRegistry="true"
SuppressRootDirectory="true"
</HarvestDirectory>
</ItemGroup>
我更喜欢这种方法,因为它会自动将生成的文件包含在您的编译源中,因此您不必在项目中包含不存在的文件。