2017-07-27 16 views
0

私は、ブートストラップを使ってmsiファイルを起動するWixインストーラを手に入れました。私は私のwixプロジェクトでポストビルドイベントとしてバッチファイルを呼び出すことでこれを行っています。これにより、キャンドルとライトが手動で呼び出され、さまざまな変数がBundle.wxsファイルに渡されます。これはすべて動作し、msiファイルを呼び出すexeファイルを生成します。Wix bootstrapper - バージョン番号をバンドルに設定する

しかし、msi BuildVersionをバンドルファイルに渡したいと思います。 msiを作成するwxsファイルでは、BuildVersion =%(AssemblyVersion.Version)を使用して、BeforeBuildセクションでセットアップしたBuildVersionを使用しています。

私が試したものにかかわらず、この変数にアクセスすることはできません。これをbuild_bootstrapper.batファイルに渡します。しかし、私はハードコードされた値を渡すことができます。

<AssemblyVersionNumber Condition="'$(AssemblyVersionNumber)' == ''">$(BuildVersion)</AssemblyVersionNumber> 

が、それは(ハードコードならば、それが読み込まれますが)私のスクリプトファイルにそれを取得時間によって空である:あなたがAfterBuildセクションに以下を参照することができますように私は現在、自分のAssemblyVersionNumberの環境変数を設定しています。私はすべてを試しました。

誰も私が%(AssemblyVersion.Version)をどのように得ることができるかについてのアイデアはありません。ポストビルドのステップから私のコマンドファイルに?事前に

おかげ

<Target Name="BeforeBuild"> 
    <GetAssemblyIdentity AssemblyFiles="..\..\App\AppThing\bin\Release\AppThing.exe"> 
     <Output TaskParameter="Assemblies" ItemName="AssemblyVersion" /> 
    </GetAssemblyIdentity> 
    <PropertyGroup> 
     <DefineConstants>BuildVersion=%(AssemblyVersion.Version);</DefineConstants> 
    </PropertyGroup> 
    </Target> 
    <Target Name="AfterBuild"> 
    <PropertyGroup> 
     <DefineConstants>BuildVersion=%(AssemblyVersion.Version);</DefineConstants> 
     <AssemblyVersionNumber Condition="'$(AssemblyVersionNumber)' == ''">$(BuildVersion)</AssemblyVersionNumber> 
    </PropertyGroup> 
    </Target> 
    <PropertyGroup> 
    <PreBuildEvent>$(ProjectDir)scripts\copy_services.bat $(SolutionDir) $(ProjectDir)</PreBuildEvent> 
    </PropertyGroup> 
    <Target Name="AfterClean"> 
    <Message Text="Cleaning wix files, TargetDir is: $(TargetDir)" Importance="High" ContinueOnError="true" /> 
    <CreateItem Include="$(TargetDir)\**\*.*"> 
     <Output TaskParameter="Include" ItemName="BinFilesDir" /> 
    </CreateItem> 
    <Delete Files="@(BinFilesDir)" /> 
    </Target>  
    <PropertyGroup> 
    <PostBuildEvent>$(ProjectDir)scripts\build_bootstrapper.bat $(ProjectDir) $(ConfigurationName) $(AssemblyVersionNumber)</PostBuildEvent> 
    </PropertyGroup> 

答えて

1

$(BuildVersionは)何も設定されていません。

定数を "BuildVersion =%(AssemblyVersion.Version)"に設定しますが、実際には "BuildVersion"というMSBuildプロパティを定義することはないので、$(BuildVersion)の値は ""です。

%(AssemblyVersion.Version)を使用します。

<AssemblyVersionNumber Condition="'$(AssemblyVersionNumber)' == ''">%(AssemblyVersion.Version)</AssemblyVersionNumber> 
+0

こんにちは、ありがとうございます。 私はすでにこれを試したことに恐れています。これは、特に%(AssemblyVersion.Version)を使用する際の問題と思われます。 1:空の文字列 %(AssemblyVersion.Version) 2:プロジェクトディレクトリにある結果、以下の2行。 $(AssemblyDersion)$(ProjectDir) いくつかの変数にアクセスできますが、アセンブリのバージョン番号にはアクセスできません。 アイデア ありがとう – Yos

+1

うまくいけば、beforebuildターゲットのプロパティグループにある '%(AssemblyVersion.Version)'を試してから、AssemblyVersionNumberの定義に '$(BuildNumber)'をもう一度使うことができます。別のターゲット内のGetAssemblyIdentityターゲットからの出力アイテムが、そのターゲットだけのスコープを持つためです。さらに、BeforeBuildターゲットのPropertyGroup –

+0

に、%(AssemblyVersion.Version)を移動するだけです。とにかくこれを試してみましたが、どうもありがとうございました。 私は実際に、単純なC#アプリケーションを呼び出して、特定のexeのアセンブリバージョン番号を取得することに戻しました。私は私のバッチファイルから、私のポストビルドステップコールを呼び出す。私はこれを使用して魔力バンドルに通すことができ、すべてがうまくいきます。私はこれまでこれを避けようとしていました。 返信いただきありがとうございます。私はそれを投票するつもりですが、誰かを誤認させるかもしれないので、それを本当に受け入れることはできません。あなたと大丈夫です。 – Yos

関連する問題