アプリケーションとそのWiXインストーラーを作成し、Subversionを使用してバージョン管理下に置きました。 WiXインストーラーがビルドするとき、そのバージョン番号をアプリケーションの現在のビルドバージョンにする必要があります。どうすればこれを達成できますか? C#を使用してアプリケーションをコーディングしました。
N.B.私はccnetを使用してこのプロジェクトを構築しています
Product/@ Version = "!(bind.FileVersion.FileId)"を使用できます(FileId
を、バージョン番号を取得するファイルのId
に置き換えます)。 light.exeは、FileId
によって参照されるファイルのバージョンを値に取り込みます。
私のプロジェクトの1つで、プリプロセッサ拡張機能を作成して実行可能ファイルからファイルバージョンを読み取ることでこれを行いました。したがって、WiXファイルは次のようになります。
<?define ProductName="$(fileVersion.ProductName($(var.MyApp.TargetPath)))" ?>
<?define CompanyName="$(fileVersion.CompanyName($(var.MyApp.TargetPath)))" ?>
<?define ProductVersion="$(fileVersion.ProductVersion($(var.MyApp.TargetPath)))" ?>
<Product
Id="<product ID>"
Name="$(var.ProductName)"
Version="$(var.ProductVersion)"
Manufacturer="$(var.CompanyName)"
Language="1033"
UpgradeCode="<upgrade code>">
CodePlexにコードを投稿しました: http://wixfileversionext.codeplex.com/
誰かが実際のXMLの例を探している場合、これは.NETアセンブリで機能します(AssemblyまたはKeyPath属性を実行する必要はありません)。 [...]プレースホルダーで無関係なコードを削除しました。
<Wix xmlns="http://schemas.Microsoft.com/wix/2006/wi">
<Product [...] Version="!(bind.fileVersion.MyDLL)">
[...]
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="INSTALLDIR" Name="MyDLLInstallLocation">
<Component Id="MainLib" Guid="[...]">
<File Id="MyDLL" Name="MyDll.dll" Source="MyDll.dll" />
[...]
</Component>
[...]
</Directory>
</Directory>
</Directory>
</Product>
</Wix>
以下は、BeforeBuild Target
およびDefineConstants
。
Bundle.wxs:
<Bundle Name="$(var.ProductName) Bootstrapper v$(var.BuildVersion)"
Version="$(var.BuildVersion)"
Bootstrapper.wixproj:
<Target Name="BeforeBuild">
<GetAssemblyIdentity AssemblyFiles="..\MyApp\bin\$(Configuration)\MyApp.exe">
<Output TaskParameter="Assemblies" ItemName="AssemblyVersion" />
</GetAssemblyIdentity>
<PropertyGroup>
<DefineConstants>BuildVersion=%(AssemblyVersion.Version)</DefineConstants>
</PropertyGroup>
</Target>
これは、達成しようとしているものにかなり近いように見えます。クルーズコントロールの同等物をご覧ください。
http://www.ageektrapped.com/blog/setting-properties-for-wix-in-msbuild/
アプリケーションのビルドスクリプトに渡すのと同じように、セットアッププロジェクトのMSBuildスクリプトにバージョンを渡すことができます。
たとえば、CIシステムが変数AppVersion
およびBuildNumber
を定義し、それらをMSBuildスクリプトに渡す場合、wixprojは対応するVersion
プロパティを作成してWixに転送できますこの:
<PropertyGroup>
<Version Condition=" '$(BuildNumber)' == '' ">0.0.1</Version>
<Version Condition=" '$(BuildNumber)' != '' ">$(AppVersion).$(BuildNumber)</Version>
<DefineConstants>Version=$(Version)</DefineConstants>
</PropertyGroup>
Version
の最初の定義は、ローカルでビルドするときのデフォルトを提供します。結局、WixではVersion
変数になります。次のようなwsxファイルで使用します。
<Product Version="$(var.Version)" ...>
<Package Description="$(var.ProductName) $(var.Version): $(var.ProductDescription)" ... />
ファイル名に関係なく(詳細ビューまたは[プロパティ]ページの列として)ウィンドウエクスプローラーから簡単に検索できるように、説明にバージョンを含めるのが好きです。
バージョンを変数として渡すと、ファイルからバージョンを読み取るよりも多くの制御が可能になります。ファイルから読み取ると、プログラムバージョンの4つの部分すべてが取得されます。ただし、 ProductVersion は最初の3つの部分のみを使用するように設計されています。