2016-09-14 32 views
1

私は2つのwixプロジェクト間で変数を共有しようとしていますが、問題があります。Wix Toolset - プロジェクト間で共有される変数

基本的には、私のブートストラップとMSIのバージョン番号を1つのファイルに入れておき、それを2つのプロジェクトで参照しようとしています。

私は3つのプロジェクト

  • インストールする必要があります - これは、.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

私は前処理と実行時を混在させていると思います。 <?VersionNo = "6.86.123"?>を定義するのは前処理であり、変数を作成しません。 –

+0

ああ、それは意味をなさない!どのように変数を作るのですか? (私が知っている本当に簡単な質問です) – martpendle

+1

Windowsインストーラのプロパティを使うことができます –

答えて

1

私はこの質問にanswerが役立つと信じています。私はそれを使って、プロパティがメインのwxsファイルで使用可能であるように見えることに気付きました。

要約すると、ライブラリフラグメントに偽コンポーネントグループを設定し、インストーラでそれを使用する必要があります。フラグメントからの偽の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> 

はそれを旋回を与えます。

関連する問題