我目前正在尝试创建一个包含多个变量定义的库,我可以在不同的安装项目中使用但没有成功。
我有几个巨大的*.wxs
文件,它们构建在一个库中,File/@Source
应该依赖于项目设置。原因是我们的内部目录结构看起来像any\path\Redistributables\In-Test\X64\productA
或any\path\Redistributables\RC\X86\productA
所以我的路径的最后两部分应该改变,例如在x64和x86 build。
现在我有几个安装项目,它们使用相同的路径,但在另一个子目录中工作,例如Redistributables\In-Test\X64\AnyOtherProductB
。
我不想将具有相同值的预处理程序变量传递给每个项目,因为路径可能会在以后更改,然后我必须编辑太多的项目设置。
所以我的问题:
是否可以使用公共变量/属性构建类似“变量/属性容器”的东西,以便我可以引用该库以使用其中为<component><file source...>
定义的变量?
我试图在$(var.sourcedir)$(var.compilemode)$(var.platform)
之前使用prepocessor变量实现这一点而没有运气。这三个部分是我需要定义一次以在几乎所有项目中使用它们的部分。
答案 0 :(得分:0)
小编辑在这里,我做了很多,我快速阅读问题并做出答案,然后重新阅读问题并认为我的答案并不适合这个问题,但在这种情况下,我希望它仍然有用,也许这里引用的其他资源之一也会有所帮助。
<小时/>
啊我做了类似这样的事情,把头撞在墙上一段时间试图弄明白。
问题是您无法在wixlib中使用$(var.sourceDir)
之类的变量,然后在项目中使用lib时更改它。当您构建它时,编译器会将wixlib中的$(var.sourceDir)
替换为此变量的实际值。您可以通过打开obj文件并查找使用此目录的组件或其他内容来验证这一点,并查看它的sourceDir变量值不是$(var.sourceDir)
。
要解决这个问题,我们将使用在链接时评估的bind / wix变量(不确定术语)。
This是&#34;如何&#34;我最终得到了很多帮助我的东西
所以,将你的变量更新为这样的东西!(bindpath.SourceDir)
<Fragment>
<util:RegistrySearchRef Id="MSVCPPRedist_x64_12"/>
<PackageGroup Id="MSVCPPRedist_x64_12">
<ExePackage
Id="MSVCPPRedist_x64_12_0_21005"
Cache="no"
Description="Visual C++ 2013 Redistributable needed for [WixBundleName]"
DetectCondition="MSVCPPRedist_x64_12 OR NOT VersionNT64"
DisplayName="Prerequisite - Visual C++ 2013 Redistributable (x64)"
InstallCommand="/install /quiet /norestart /log vc12log.txt"
PerMachine="yes"
Permanent="yes"
SourceFile="!(bindpath.PrerequisitesDir)VC++\vcredist_x64_12.exe"
UninstallCommand="/uninstall"
Vital="yes"/>
</PackageGroup>
</Fragment>
然后在构建机器上的一些道具文件或项目文件中,您可以包含以下内容:
<LinkerAdditionalOptions>-b "PrerequisitesDir=$(PrerequisitesDir)\"</LinkerAdditionalOptions>
如果$(PrerequisitesDir)属性是基于构建机器上的msbuild文件中的相对路径设置的(如果使用绝对路径也可以):
<!-- Directories -->
<PrerequisitesDir>$(MSBuildThisFileDirectory)..\..\..\Installers\Prerequisites\</PrerequisitesDir>
现在,当您构建链接器阶段时,将使用构建时定义的bindPath来查找源文件。
关于平台和配置变量,我认为你可以使用引用的WixVariables!(wix.VariableName),但是我不确定我的头脑,没有更多的自己试验。您可以查看this answer here以帮助您更好地了解不同类型的变量。如果WixVariables没有工作,你可以构建几种yoru wixlib,并在wixproj中使用MSBuild属性$(配置),在wixlib文件的hintpath中引用相应的一个。