ビルド プラットフォームには、ビルド プロセス中に任意の数のアクションを実行する機能が必要です。 MSBuild では 、タスク を使用してこれらのアクションを実行します。 タスクは、MSBuild がアトミック ビルド操作を実行するために使用する実行可能コードの単位です。
タスク ロジック
MSBuild XML プロジェクト ファイル形式では、独自にビルド操作を完全に実行できないため、タスク ロジックはプロジェクト ファイルの外部に実装する必要があります。
タスクの実行ロジックは、ITask名前空間で定義されているMicrosoft.Build.Framework インターフェイスを実装する .NET クラスとして実装されます。
タスク クラスは、プロジェクト ファイル内のタスクで使用できる入力パラメーターと出力パラメーターも定義します。 Task 要素に同じ名前の対応する属性を配置し、この記事の後の例に示すように値を設定することで、 タスク クラスによって公開されるすべてのパブリック設定可能な非静的非抽象プロパティに、プロジェクト ファイル内の値を指定できます。
ITask インターフェイスを実装するマネージド クラスを作成することで、独自のタスクを作成できます。 詳細については、「タスクの 書き込み」を参照してください。
プロジェクト ファイルからタスクを実行する
プロジェクト ファイルでタスクを実行する前に、まず、タスクを実装するアセンブリ内の型を UsingTask 要素を使用してタスク名にマップする必要があります。 これにより、MSBuild は、タスクがプロジェクト ファイル内で検出されたときに、タスクの実行ロジックを検索する場所を知ることができます。
MSBuild プロジェクト ファイルでタスクを実行するには、タスクの名前を持つ要素を Target 要素の子として作成します。 タスクがパラメーターを受け入れる場合、これらは要素の属性として渡されます。
MSBuild 項目リストとプロパティは、パラメーターとして使用できます。 たとえば、次のコードは、MakeDir タスクを呼び出し、Directories オブジェクトのMakeDir プロパティの値を 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、C# ソース コード ファイルをコンパイルする Csc などの多くのタスクが付属しています。 使用可能なタスクと使用状況の情報の完全な一覧については、「タスク リファレンス」を参照してください。
オーバーライドされたタスク
MSBuild では、複数の場所でタスクが検索されます。 最初の場所は、拡張子 .OverrideTasks MSBuild ディレクトリに格納されているファイル内にあります。 これらのファイル内のタスクは、プロジェクト ファイル内のタスクを含め、同じ名前の他のタスクをオーバーライドします。 2 番目の場所は、プロジェクト ファイルとそのインポートにあります。 タスクがプロジェクトで定義されていない場合は、MSBuild ディレクトリ内の .tasks ファイルで定義されている MSBuild の既定のタスクで検索されます。