3

生成されたすべてのサテライト アセンブリを自動的に含めるように WiX を設定できますか?

目標は、最大 10 の言語で使用できるローカライズされた文字列を含むアプリケーションをインストールする単一の英語 MSI を用意することです。

私はこの既存のSO質問を見つけました:

WiX でビルドされた MSI にサテライト アセンブリ (ローカライズされたリソース) を含めるにはどうすればよいですか?

ただし、その解決策は、カルチャ バリアントごとに新しいコンポーネントとディレクトリの定義を手動で追加する必要があることを示唆しています。

それが唯一の方法ですか、それとも WiX が Visual Studio プロジェクト定義から各言語について何らかの方法で自動的に学習できるのでしょうか?

(VS2010 と WiX 3.8 を実行)

4

1 に答える 1

0

HarvestDirectoryタスクを使用して、インストーラーに含めるファイルを自動的に収集できます。サテライト アセンブリとインストーラーのビルドごとにフォルダーを指定するだけで、ターゲット フォルダーが再スキャンされ、ファイル リストが再生成されます。

例えば:

1) beforedBuild ターゲット内の .wixproj 収穫タスクに配置します (デフォルトでコメント化されます)。

<Target Name="BeforeBuild">
<HeatDirectory OutputFile="SatelliteAsm_Files.wxs" Directory="$(SolutionDir)PathToYourAssemblies" DirectoryRefId="MODULELOCATION" ComponentGroupName="Modules" SuppressCom="true" SuppressFragments="true" SuppressRegistry="true" SuppressRootDirectory="true" AutoGenerateGuids="false" GenerateGuidsNow="true" ToolPath="$(WixToolPath)" PreprocessorVariable="var.ApplicationModuleDir" SuppressUniqueIds="True" />

2) 初めてインストーラーをビルドします。その後、WIX プロジェクト内に SatelliteAsm_Files.wxs ファイルが見つかります。次のような構造になります。

<Fragment>
    <DirectoryRef Id="DIRVARIABLE">
        <Directory Id="dir8B97956DEA791D69AB336941C9163652" Name="x64">
            <Component Id="cmpE72E1056FC8A2AE97260E772A6386763" Guid="{481FF1F3-7AFF-4C17-9AE0-5347BEEB3726}">
                <File Id="filACCD137532BB3AE1F4B3BC207018585B" KeyPath="yes" Source="$(var.ApplicationLibDir)\x64\name.txt" />
            </Component>
            ...
<Fragment>
    <ComponentGroup Id="GroupName">
        <ComponentRef Id="cmpE72E1056FC8A2AE97260E772A6386763" />
        ...

3)プロジェクトにリンクとして追加します(ソース管理でこのファイルを読み取り専用に設定しないことが重要です.coz WIXはビルドに失敗します)。

4) 機能のいずれかでこの ComponentGroup を参照します

 <Feature Id="MyFeauture">
    <ComponentGroupRef Id="GroupName" />

ついに準備が整いました!これで、ハーベスト タスクで指定したフォルダーから収集されたファイルがインストーラーに含まれるようになります。ただし、これをセットアップするのは王様の苦痛であり、必要なファイルのみを残すためにタスクキーのさまざまな組み合わせまたは XSD 変換を試す必要がある場合があるため、これが箱から出してすぐに機能するとは思わないでください (はい、WIX は XSD 変換を行うことができますが、そうではありません) WIX によって収集されたファイルまたはフォルダーをフィルタリングする簡単で機敏な方法はありません)

注: サテライト アセンブリだけでなく、ビン全体、サード パーティのライブラリなどを収集しても問題ないため、新しいアセンブリをソリューションに追加するたびに手動でインストーラー プロジェクトを更新する必要はありません。

于 2015-02-25T16:53:24.623 に答える