Wix工具集 - 跨项目/解决方案的可变共享

时间:2016-09-14 07:52:51

标签: installation wix windows-installer install installer

我正在尝试在我的两个wix项目中共享变量,但我遇到了问题。

基本上我试图在一个文件中完成我的bootstrapper和MSI的版本号,然后由两个项目引用。

我有三个项目

  • 安装 - 这是一个创建.msi文件的安装项目
  • Bootstrapper - 这是一个在运行时引用和运行.msi文件的Wix Bootstrapper项目
  • Shared - 这是一个wixlib项目,其中包含片段中的单个变量,即版本号

共享项目包含一个名为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?>标记解决了问题,我希望安装项目能够构建

有没有人对我在这里做错了什么有任何想法?

对我而言,看起来变量尚未在构建尝试调用它时定义,但我不确定是否显示更改顺序以确保变量在其他任何内容之前定义

感谢您的帮助

1 个答案:

答案 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>

给它一个旋转。