【MSBuild】 メタデータとバッチ処理

MSBuildメタデータを調べてたら、まだまだテクニックがありました。
リスト項目のメタデータを利用して、バッチ処理。。。要するに繰り返し処理を記述できます。
MSBuildにはループ文の記述は無いので、このバッチ処理の機能を利用して、
タスクを繰り返し実行することが可能です。

バッチ処理

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" 
 DefaultTargets="HelloWorlds">

 <ItemGroup>
  <HelloMessages Include="Hello World 1">
   <Number>1</Number>
  </HelloMessages>
  <HelloMessages Include="Hello World 2">
   <Number>2</Number>
  </HelloMessages>
  <HelloMessages Include="Hello World 3">
   <Number>3</Number>
  </HelloMessages>
 </ItemGroup>

 <Target Name="HelloWorlds">
  <Message Text="@(HelloMessages) is Call Number %(HelloMessages.Number)" />
 </Target>
</Project>

実行結果
ターゲット HelloWorlds:
    Hello World 1 is Call Number 1
    Hello World 2 is Call Number 2
    Hello World 3 is Call Number 3

ビルドに成功しました。
    0 警告
    0 エラー

ポイントは、リスト項目にメタデータの定義を追加して
(ここではNumberがHelloMessagesのメタデータです)、
%(リスト項目名.メタデータ名)で呼び出すことです。

この呼び出しを利用するとバッチと判断されて繰り返し処理が実行されます。

MSDNライブラリを読んだ感じだと、複数のリスト項目を1つのバッチで実行したり、
Condition属性と組み合わせてフィルタをかけたり、
ターゲットと組み合わせて繰り返しターゲットを実行することも可能みたいです。

意外と奥が深いですねMSBuild