web-dev-qa-db-ja.com

WIX:msi出力ファイルの名前を動的に設定する方法

Wixプロジェクトが生成するmsiファイルのファイル名に動的な部分を含めたいと思います。この動的な部分は、私のwixプロジェクトの一部であり、次のように宣言されている変数によって制御する必要があります。

<?define ProductVersion="7.1.0.1" ?>

そのwix変数の値をリンカーに送信して、出力ファイル名の一部として使用する方法を知っている人はいますか?

ちなみに:私はWix3を使用しています

26
Jan

これは単なるファイル名なので、ビルドスクリプトでファイルの名前を変更するビルド後のアクションを実行してみませんか(MSBuildを想定)。

2
Agent_9191

.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
46
Charlie

Msiファイル名はwixファイルではなく、_light.exe -out_スイッチによって決定されます。ビルドスクリプトで次のことを行うと、バッチスクリプトであると仮定して、_-out_とwixファイル内で同じ値を使用できます。

  • _set productversion=1.2.3_で環境変数を設定します
  • _-out foo%productversion%.msi_を_light.exe_リンカーに渡します
  • $(env.productversion)と同じ環境変数をwixファイルで使用します
16
Wim Coenen

この操作を行うための優れたリファレンス投稿がいくつか見つかりました。

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番目の投稿の貴重なコンテキスト)。

チャームのように機能します!

6
GTAE86

* .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

1
lsaudon

.wixprjファイル内以外に複数の構成がある場合は、次の操作を実行できます。

<OutputName Condition="'$(Configuration)' == 'User'">User.Setup</OutputName>
<OutputName Condition="'$(Configuration)' == 'Designer'">Designerr.Setup</OutputName>
1
RatiboR

変数はWiXで定義する必要がありますか? MSBuildからセットアップバイナリをビルドしていて、出力ファイル名をMyProject_$(Platform)に設定しただけです。MSBuild変数の置換も同様に機能すると思います。

0
Rytmis