Wixプロジェクトが生成するmsiファイルのファイル名に動的な部分を含めたいと思います。この動的な部分は、私のwixプロジェクトの一部であり、次のように宣言されている変数によって制御する必要があります。
<?define ProductVersion="7.1.0.1" ?>
そのwix変数の値をリンカーに送信して、出力ファイル名の一部として使用する方法を知っている人はいますか?
ちなみに:私はWix3を使用しています
これは単なるファイル名なので、ビルドスクリプトでファイルの名前を変更するビルド後のアクションを実行してみませんか(MSBuildを想定)。
.wixprojのOutputNameを更新し、MSBuild変数を使用して、バージョン番号またはその他の任意の変数を渡すことができます。
私のビルドスクリプトは次のようになります。
set PRODUCTVERSION=7.1.0.1
MSBuild.exe /p:Configuration=Debug /p:ProductVersion=%PRODUCTVERSION% Installer.wixproj
そして私のWiXプロジェクトは次のようになります:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>1.0.0.0</ProductVersion>
<ProjectGuid>{b7415c44-8d59-4ac2-b698-03e399a305e3}</ProjectGuid>
<SchemaVersion>2.0</SchemaVersion>
<OutputName>Installer.$(ProductVersion)</OutputName>
...
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<OutputPath>bin\$(Configuration)\</OutputPath>
<IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
<DefineConstants>Debug</DefineConstants>
<WixVariables>ProductVersion=$(ProductVersion)</WixVariables>
</PropertyGroup>
...
</Project>
出力は次のようになります。
Installer.7.1.0.1.msi
Msiファイル名はwixファイルではなく、_light.exe -out
_スイッチによって決定されます。ビルドスクリプトで次のことを行うと、バッチスクリプトであると仮定して、_-out
_とwixファイル内で同じ値を使用できます。
set productversion=1.2.3
_で環境変数を設定します-out foo%productversion%.msi
_を_light.exe
_リンカーに渡します$(env.productversion)
と同じ環境変数をwixファイルで使用しますこの操作を行うための優れたリファレンス投稿がいくつか見つかりました。
http://blog.tentaclesoftware.com/archive/2009/05/03/38.aspx
ビルド前のイベントを使用して出力ファイルを作成するためのより良い方法のフォローアップ:
http://blog.tentaclesoftware.com/archive/2010/08/05/99.aspx
リンクが古いことは知っていますが、方法は適切です。
基本的な手順は次のとおりです。
使用したいバージョンを、プロジェクトからアクセスできるファイルに入れます。 wxsでもそのバージョンにバインドするため、インストールのメイン実行可能ファイルを使用します。私の場合、C#でビルドしていてSVNを使用しているので、Assembly.csのテンプレートバージョンであるAssembly.cs.txtがあり、ビルド前のイベントとしてsubwcrevを実行して、次のようなAssembly.csを作成します。実行可能ファイルにコンパイルされます(実際には、ソリューションの別のプロジェクトで実行します)。 Subwcrevは、バージョンの作成に使用する日付とリビジョン情報を「major.minor.version.0」の形式で挿入します。ここで、バージョンには「year.month.revision.0」を使用します。
さて、私は通常このメソッドでAssemblyFileVersionを設定しますが、上記の投稿で参照されているwixprojビルドイベントでバージョン番号を使用できるようにするには、GetAssemblyIdentityでアクセスできるAssemblyVersionも設定する必要があります。このメソッドは、他の誰かがリンクしているアセンブリを実際に使用している場合は疑わしいものですが、最終的なアプリケーションの実行可能ファイルに含まれているため、私にとっては問題ありません。
2番目の投稿で概説されている手順に従います(最初の投稿では、wxsでのバージョンのバインド方法の使用と、wixprojをアンロードして編集する方法について説明しています-2番目の投稿の貴重なコンテキスト)。
チャームのように機能します!
* .wixprojを開きます(例:_Setup.wixproj
_)
ファイルの最後に移動します。
$(Configuration)
=デバッグ|リリース…
AssemblyFilesでアプリケーションのパスを設定します。
_<Target Name="BeforeBuild">
<GetAssemblyIdentity AssemblyFiles="..\App\bin\$(Configuration)\App.exe">
<Output TaskParameter="Assemblies" ItemName="AsmInfo" />
</GetAssemblyIdentity>
<CreateProperty Value="$(SolutionName)_%(AsmInfo.Version)_$(Configuration)">
<Output TaskParameter="Value" PropertyName="TargetName" />
</CreateProperty>
</Target>
_
出力= App_1.0.0.0_Debug.msi
.wixprjファイル内以外に複数の構成がある場合は、次の操作を実行できます。
<OutputName Condition="'$(Configuration)' == 'User'">User.Setup</OutputName>
<OutputName Condition="'$(Configuration)' == 'Designer'">Designerr.Setup</OutputName>
変数はWiXで定義する必要がありますか? MSBuildからセットアップバイナリをビルドしていて、出力ファイル名をMyProject_$(Platform)
に設定しただけです。MSBuild変数の置換も同様に機能すると思います。