2012-06-28 2 views
13

1年以上前にVisual Studio 2010でWIXプロジェクトを作成しました。これは、MSIファイルとブートストラップsetup.exeを作成します。実際には、英語とフランス語の2つの言語のファイルのペアを作成します。私は今、このプロジェクトをTFS CIビルドに統合しています。ブートストラッパーのsetup.exeファイルを生成するためにCIビルドを取得するのに問題があります。ローカライズされたWIX 3.6ブートストラップを作成する。

最近、すべてのビルドサーバでWix 3.6 RCにアップグレードしました。だから、私はバーンを、ブートストラップの古いスタイルを使うのではなく、試してみると思いました。私は自分のソリューションに新しいBootstrapperプロジェクトを追加しました。ブートストラッププロジェクトには、以前のMSIプロジェクトで生成されたMSIだけをロードする単純なbundle.wxsが含まれています。私が構築しようとすると、しかし、私は次のエラーを取得する:バンドル内の

error LGHT0103: The system cannot find the file 'C:\Tf\Advantage\Dev\Solution\Configuration\LaunchPad.Wix\bin\Release\fr-fr\LaunchPad.msi;C:\Tf\Advantage\Dev\Solution\Configuration\LaunchPad.Wix\bin\Release\en-us\LaunchPad.msi'.

マイパッケージ参照は次のようになります。

<MsiPackage Id="MyApplication" SourceFile="$(var.LaunchPad.Wix.TargetPath)" /> 

LaunchPad.WixはウィックスMSIプロジェクトの名前です。 LaunchPad.Wixプロジェクトを変更して1つの言語だけを構築すると、うまく動作します。ブートストラップのプロジェクトタイプは、複数の言語のセットアップファイルを構築することをサポートしていないようです。これは本当ですか?回避策の提案はありますか?

編集

さらに調査時にブートストラップ・プロジェクトでもローカライズをサポートしている場合、私は疑問に思います。私は自分のWix MSIプロジェクトをfr-frだけを作成するように設定しようとしました。私のブートストラッププロジェクトが英語で作成したsetup.exe。ブートストラッププロジェクトのプロジェクトプロパティを編集すると、「構築するカルチャ」フィールドがロックされ、空白になります。私は英語以外のブートストラップをどのように構築するのですか?これはまだ可能ですか?

+0

このCodePlexプロジェクトには、ソースコード付きのブートストラップローカリゼーションサンプルがあります。https://classicwixburntheme.codeplex.com/ –

答えて

20

ここで起こっていくつかのものがあります。

  1. あなたが複数の文化を使用する場合は、単一のファイル名を見込んでMSBuildの外の何かにTargetPathが使用することはできません。見つけたとおり、TargetPathはビルドされたローカライズされたファイルのリストです。ただし、.msiパッケージの出力言語を修飾する場合は、TargetPathを使用できます。<MsiPackage SourceFile="$(var.TestMsi.en-US.TargetPath)" Id="MsiEnUs" />

  2. en-USとfr-FRの両方またはどちらか一方をインストールできるブートストラップを作成する場合は、それぞれをリストする必要があります.msiパッケージを独自のMsiPackage要素で個別にパッケージ化します。

  3. en-USとfr-FRの2つのブートストラップを作成する場合は、言語ごとにブートストラッパー.wixprojを2回呼び出す必要があります。ブートストラッパーはCulturesの "トリック"をサポートしていません - MSBuildの1回の呼び出しから2つの出力を生成するのは問題です(TargetPathの問題を目撃してください)。

あなたがWixStandardBootstrapperApplicationを使用している場合は、それが自動的にユーザーのUI言語に基づいてUIをローカライズしようとすると、バックシステムUI言語に落下し、最終的に英語にフォールバック。あなたはこのようなペイロードを持っていると思いますので、それは、LCIDの名にちなんで名付けられたディレクトリにローカライズされた文字列を探します。

<Payload Name="1033\thm.wxl" SourceFile="..." /> 
<Payload Name="1036\thm.wxl" SourceFile="..." /> 

は残念ながら、WixStandardBootstrapperApplication文字列は、現在唯一のEN-USのために用意されています。だからfr-FRのブートストラップが英語でUIを表示するのはこのためです。 WiXソースファイルHyperlinkTheme.wxlまたはRtfTheme.wxl(使用するテーマに応じて)をローカライズする必要があります。これらのファイルは両方ともsrc¥ext¥BalExtension¥wixstdba¥Resourcesにあります。

+0

en-USおよびfr-FRインストールパッケージは、WIX UI文字列を除いて同一です。私はちょうど今、burnインストーラがMSI UIをまったく表示していないことに気づいた。 BurnのUIの代わりにMSIのUIを使用する方法がありますか?もしそうなら、私は2つのプロジェクトを作成することができます - それぞれのMSI(en-USとfr-FR)に1つ。私の他のオプションのようなサウンドは、単一のブートストラップであるでしょう。私はバーンでUIを作成したいと思います(en-USとfr-FRの両方の翻訳で)。 Burnは、ユーザーのOS言語設定に基づいて適切な翻訳を表示します。それは正しいと思いますか? –

+0

右。ブートストラップをローカライズする場合は、.msiが1つだけ必要です。または、さらに一歩進んでコードを1つの.msiに、ローカライズされたリソースを言語ごとに1つの.msiに移動することもできます。 2つの言語だけではそれほど節約できませんでしたが、私は十数の言語を出荷した製品に取り組んできました。 –

+0

en-US/fr-FR/ko-KO/th-TH/ar-SA/el-GRをインストールできるブートストラップを1つ作成して、現在のシステム言語を自動的に検出し、UI文字列をシステムに変換する遅れをとる。どうすれば達成できますか?ブートストラップには、WixStandardBootstrapperApplication/@ LocalizationFileという1つのタグがあり、手動で選択する必要があります。どのようにしてシステム言語に合わせて自動的に選択できますか? –

4

良い。それはBob Arnsonが言ったように働く。

ただし、ペイロードの名前とSourceFileに注意する必要があります。

<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense"> 
     <Payload Name="2052\thm.wxl" SourceFile="2052\thm.wxl" /> 
</BootstrapperApplicationRef> 

名前を別の名前に変更すると、ブートストラップはローカライズされません。

関連する問題