2016-09-14 202 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> 

試一試。

相關問題