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 によって収集されたファイルまたはフォルダーをフィルタリングする簡単で機敏な方法はありません)
注: サテライト アセンブリだけでなく、ビン全体、サード パーティのライブラリなどを収集しても問題ないため、新しいアセンブリをソリューションに追加するたびに手動でインストーラー プロジェクトを更新する必要はありません。