2016-09-14 206 views
1

我想跨我的两个wix项目共享变量,但我遇到了问题。Wix工具集 - 跨项目/解决方案的共享变量

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

我有三个项目

  • 安装 - 这是创建一个.msi文件
  • 引导程序安装项目 - 这是一个维克斯引导程序项目,引用并运行在运行时
  • .msi文件
  • 共享 - 这是包含在作为版本号

共享项目包含一个单一的文件我称水珠的片段的单个可变一个wixlib项目alVars.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"> 

和安装项目这个变量的变量引用这样的 - 并具有共享项目的.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

我想你是混合预处理和运行时。 <?define VersionNo =“6.86.123”?>是预处理,它不会创建变量。 –

+0

啊,这是有道理的!那么我该如何做一个变量? (对不起,真的很简单的问题我知道!) – martpendle

+1

你可以使用Windows Installer属性 –

回答

1

我相信answer这个问题会有帮助。我使用过它并注意到这些属性似乎可以在我的主wxs文件中使用。总之,你需要在你的库碎片中设置一个假的componentGroup,并在你的安装程序中使用它。只要你的片段中的假componentGroup在你的主安装中被引用为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> 

试一试。

相关问题