我正在尝试在我的两个wix项目中共享变量,但我遇到了问题。
基本上我试图在一个文件中完成我的bootstrapper和MSI的版本号,然后由两个项目引用。
我有三个项目
共享项目包含一个名为GlobalVars.wxs的文件,看起来像这样
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<?define VersionNo = "6.86.123"?>
</Fragment>
</Wix>
引导程序像这样引用这个变量
<Bundle Name="ProgramName" Version="$(var.VersionNo)" Manufacturer="CompanyName" UpgradeCode="Guid" Compressed="no">
并且Install项目引用了这样的变量 - 并且引用了共享项目中的.wxs
<Product Id="*" Name="Program Name" Language="2057" Version="$(var.VersionNo)" Manufacturer="CompanyName" UpgradeCode="guid">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" InstallPrivileges="elevated"/>
<?include GlobalVars.wxs ?>
两个项目都有对包含变量
的wixlib项目的引用设置当我尝试构建时,我在安装和引导程序项目上都收到此错误
Undefined preprocessor variable '$(var.VersionNo)'.
如果<?include?>
标记解决了问题,我希望安装项目能够构建
有没有人对我在这里做错了什么有任何想法?
对我而言,看起来变量尚未在构建尝试调用它时定义,但我不确定是否显示更改顺序以确保变量在其他任何内容之前定义
感谢您的帮助
答案 0 :(得分:1)
我相信这个问题的answer会有所帮助。我已经使用它并注意到属性似乎可以在我的主wxs文件中使用。
总而言之,您需要在库片段中设置假的componentGroup,并在安装程序中使用它。您不再需要include,只要您的片段中的假组件组在主安装中被引用为componentGroupRef,并且您的wixlib项目在您的安装程序项目中通过VS引用(您说您已经完成此操作)在上面的评论中。)
您的库片段可能看起来像这样。
<Fragment id="fragment_id_may_not_be_needed">
<?define VersionNo = "6.86.123"?>
<ComponentGroup Id="c.define_version_num" />
</Fragment>
如果无论出于何种原因定义都不起作用,请尝试使用属性。我有兴趣知道哪些有用。属性似乎对我有用。
然后在主安装中引用它,如下所示:
<Feature Id="Main_installation" Title="Main installation" Level="1">
<!-- bringing in fragments from the shared libraries -->
<ComponentGroupRef Id="c.define_version_num" />
</feature>
给它一个旋转。