web-dev-qa-db-ja.com

WiXインストーラーのバージョンを現在のビルドバージョンに設定するにはどうすればよいですか?

アプリケーションとそのWiXインストーラーを作成し、Subversionを使用してバージョン管理下に置きました。 WiXインストーラーがビルドするとき、そのバージョン番号をアプリケーションの現在のビルドバージョンにする必要があります。どうすればこれを達成できますか? C#を使用してアプリケーションをコーディングしました。

N.B.私はccnetを使用してこのプロジェクトを構築しています

123
Draco

Product/@ Version = "!(bind.FileVersion.FileId)"を使用できます(FileIdを、バージョン番号を取得するファイルのIdに置き換えます)。 light.exeは、FileIdによって参照されるファイルのバージョンを値に取り込みます。

165
Rob Mensching

私のプロジェクトの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/

36
Chris Kaczor

誰かが実際の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>
23
K0D4

以下は、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>
18
Brock Hensley

これは、達成しようとしているものにかなり近いように見えます。クルーズコントロールの同等物をご覧ください。

http://www.ageektrapped.com/blog/setting-properties-for-wix-in-msbuild/

3
JohnW

アプリケーションのビルドスクリプトに渡すのと同じように、セットアッププロジェクトの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つの部分のみを使用するように設計されています。

2
Edward Brey