MSBuild バッチ
更新 : 2007 年 11 月
MSBuild では、アイテム メタデータに基づいて項目のコレクションを異なるカテゴリ (バッチ) に分割し、バッチごとにターゲットまたはタスクを 1 回実行できます。
タスクのバッチ
タスクのバッチでは、項目のコレクションを異なるバッチに分割して、各バッチを個別にタスクに渡す方法を提供することにより、プロジェクト ファイルを簡略化できます。これは、プロジェクト ファイルでタスクとその属性を、複数回実行できるものであっても一度だけ宣言する必要があることを意味します。
%(ItemMetaDataName) 表記をいずれかのタスク属性で使用して、MSBuild でタスクのバッチを実行することを指定します。次の例は、Color アイテム メタデータ値に基づいて Example 項目のコレクションをバッチに分割し、各バッチを個別に MyTask タスクに渡します。
メモ : |
---|
タスク属性で項目のコレクションを参照しない場合や、メタデータ名があいまいな場合は、%(ItemCollection.ItemMetaDataName) 表記を使用すると、バッチに使用するアイテム メタデータ値を完全に修飾できます。 |
<Project
xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Example Include="Item1">
<Color>Blue</Color>
</Example>
<Example Include="Item2">
<Color>Red</Color>
</Example>
</ItemGroup>
<Target Name="RunMyTask">
<MyTask
Sources = "@(Example)"
Output = "%(Color)\MyFile.txt"/>
</Target>
</Project>
より詳細なバッチの例については、「方法 : アイテム メタデータを使用してタスクを一度に処理する」を参照してください。
ターゲットのバッチ
MSBuild は、ターゲットの入力および出力が最新かどうかを確認してから、ターゲットを実行します。入力と出力の両方が最新である場合、ターゲットはスキップされます。ターゲット内のタスクがバッチを使用する場合、MSBuild は項目の各バッチの入力および出力が最新かどうかを確認する必要があります。最新でない場合、ターゲットはヒットするたびに実行されます。
次の例に %(ItemMetaDataName) 表記の Outputs 属性を含む Target 要素を示します。MSBuild は、Color 項目メタデータに基づいて Example 項目のコレクションをバッチに分割し、各バッチの出力ファイルのタイムスタンプを分析します。バッチからの出力が最新でない場合は、ターゲットが実行されます。最新である場合は、ターゲットはスキップされます。
<Project
xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Example Include="Item1">
<Color>Blue</Color>
</Example>
<Example Include="Item2">
<Color>Red</Color>
</Example>
</ItemGroup>
<Target Name="RunMyTask"
Inputs="@(Example)"
Outputs="%(Color)\MyFile.txt">
<MyTask
Sources = "@(Example)"
Output = "%(Color)\MyFile.txt"/>
</Target>
</Project>
ターゲットのバッチの別の例については、「方法 : アイテム メタデータを使用してターゲットを一度に処理する」を参照してください。