MSBuild タスク
ビルド プラットフォームには、ビルド処理中に任意の数のアクションを実行できる機能が必要です。MSBuild では、タスクを使用して、それらのアクションを実行します。タスクとは、実行可能コードにおいて、MSBuild による分割不可能なビルド処理の実行単位を表すものです。
タスクの論理
MSBuild XML プロジェクトのファイル形式では、ビルド処理を完全に実行できません。そのため、プロジェクト ファイルの外部でタスクの論理を実装する必要があります。
タスクの実行論理は、ITask インターフェイスを実装する .NET クラスとして実装され、Microsoft.Build.Framework 名前空間で定義されます。
タスク クラスは、プロジェクト ファイル内のタスクで使用可能な入力および出力パラメーターも定義します。タスク クラスによって公開される、パブリックに設定可能なすべての非静的で非抽象のプロパティへは、Task 要素に同じ名前の対応する属性を配置することにより、プロジェクト ファイル内でアクセスできます。
ITask インターフェイスを実装するマネージ クラスを記述することにより、独自のタスクを作成できます。詳細については、「タスクの作成」を参照してください。
プロジェクト ファイルからのタスクの実行
プロジェクト ファイルでタスクを実行する前に、UsingTask 要素を使用して、タスクを実装するアセンブリ内の型をタスク名に割り当てる必要があります。それによって、MSBuild は、タスクの実行論理がプロジェクト ファイル内で見つかったときに、参照先を把握できます。
MSBuild プロジェクト ファイルでタスクを実行するには、タスク名を名前に持つ要素を Target 要素の子要素として作成します。タスクがパラメーターを受け取ると、これらは要素の属性として渡されます。
MSBuild 項目のリストおよびプロパティは、パラメーターとして使用できます。たとえば、次のコードは MakeDir タスクを呼び出し、MakeDir オブジェクトの Directories プロパティの値を、前の例で宣言した BuildDir プロパティの値と同じ値に設定します。
<Target Name="MakeBuildDirectory">
<MakeDir
Directories="$(BuildDir)" />
</Target>
タスクはプロジェクト ファイルに情報を返し、後で使用するために項目またはプロパティに保存することもできます。たとえば、次のコードは Copy タスクを呼び出し、CopiedFiles 出力プロパティからの情報を SuccessfullyCopiedFiles 項目のリストに保存します。
<Target Name="CopyFiles">
<Copy
SourceFiles="@(MySourceFiles)"
DestinationFolder="@(MyDestFolder)">
<Output
TaskParameter="CopiedFiles"
ItemName="SuccessfullyCopiedFiles"/>
</Copy>
</Target>
含まれているタスク
MSBuild には、ファイルをコピーする Copy、ディレクトリを作成する MakeDir、Visual C# ソース コード ファイルをコンパイルする Csc など、多くのタスクが付属しています。使用可能なすべてのタスクと使用法については、「MSBuild タスク リファレンス」を参照してください。
オーバーライドされるタスク
MSBuild では、複数の場所でタスクを検索します。まず、.NET Framework ディレクトリに格納された拡張子が .OverrideTasks のファイル内で検索します。これらのファイル内のタスクは、プロジェクト ファイル内のタスクも含め、同じ名前のその他のタスクをオーバーライドします。次に、.NET Framework ディレクトリにある拡張子が .Tasks のファイル内で検索します。タスクがこのどちらの場所でも見つからない場合は、プロジェクト ファイル内のタスクが使用されます。