ターゲットのバッチ処理で項目のメタデータを操作する
MSBuild には、ビルド ターゲットの入力と出力の依存関係の分析を実行する機能があります。 ターゲットの入力または出力が最新の状態であると判断された場合、ターゲットはスキップされ、ビルドが進行します。 Target
要素は Inputs
属性と Outputs
属性を利用し、依存関係分析中に検査する項目を指定します。
バッチ処理された項目を入力または出力として使用するタスクがターゲットに含まれている場合、ターゲットの Target
要素では、既に最新の状態になっている項目のバッチ処理を MSBuild でスキップできるようにするために、その Inputs
または Outputs
属性でバッチ処理を利用する必要があります。
バッチのターゲット
次の例には、Culture
項目メタデータに基づいて 2 つのバッチに分割されている Res
という名前の項目一覧が含まれています。 これらのバッチのいずれも AL
タスクに渡されます。このタスクで、バッチごとに出力アセンブリが作成されます。 Target
要素の Outputs
属性でバッチ処理を利用することで、MSBuild では、ターゲットを実行する前に、個々のバッチが最新の状態になっているかどうかを判断できます。 ターゲットのバッチ処理を利用しないと、ターゲットが実行されるたびに項目の両方のバッチが実行されます。
<Project
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Res Include="Strings.fr.resources">
<Culture>fr</Culture>
</Res>
<Res Include="Strings.jp.resources">
<Culture>jp</Culture>
</Res>
<Res Include="Menus.fr.resources">
<Culture>fr</Culture>
</Res>
<Res Include="Dialogs.fr.resources">
<Culture>fr</Culture>
</Res>
<Res Include="Dialogs.jp.resources">
<Culture>jp</Culture>
</Res>
<Res Include="Menus.jp.resources">
<Culture>jp</Culture>
</Res>
</ItemGroup>
<Target Name="Build"
Inputs="@(Res)"
Outputs="%(Culture)\MyApp.resources.dll">
<AL Resources="@(Res)"
TargetType="library"
OutputAssembly="%(Culture)\MyApp.resources.dll">
</AL>
</Target>
</Project>