MSBuild タスク

ビルド プラットフォームでは、ビルドの処理中に、いくつかのアクションを実行する権限が必要です。 MSBuild では、これらのアクションを実行するために "タスク" が使用されます。 タスクとは、分割不可能なビルド操作を実行するために MSBuild で使用される実行可能コードの単位です。

タスクのロジック

MSBuild XML プロジェクト ファイル形式は、それ自体でビルド操作を完全に実行することができないため、プロジェクト ファイルの外部でタスクのロジックを実装する必要があります。

タスクの実行ロジックは、Microsoft.Build.Framework 名前空間で定義されている ITask インターフェイスを実装する .NET クラスとして実装されます。

タスク クラスは、プロジェクト ファイル内のタスクで使用可能な入力パラメーターと出力パラメーターも定義します。 タスク クラスによって公開されている、パブリックに設定可能な非静的かつ非抽象のプロパティは、すべてプロジェクト ファイル内で値を設定できます。それには、Task 要素上に、対応する属性を同じ名前で配置し、この記事の後半の例で示すようにその値を設定します。

ITask インターフェイスを実装するマネージド クラスを記述することにより、独自のタスクを作成できます。 詳細については、「タスクの作成」を参照してください。

プロジェクト ファイルからタスクを実行する

プロジェクト ファイルでタスクを実行する前に、まずタスクを実装するアセンブリ内の型を、UsingTask 要素でタスク名にマップする必要があります。 これにより、MSBuild が、プロジェクト ファイルでタスクを見つけた場合にどこでその実行ロジックを探せばよいかを把握できます。

MSBuild プロジェクト ファイルでタスクを実行するには、要素を、そのタスクの名前で、Target 要素の子として作成します。 タスクがパラメーターを受け取る場合、パラメーターは要素の属性として渡されます。

MSBuild の項目一覧とプロパティは、パラメーターとして使用できます。 たとえば、次のコードでは、MakeDir タスクを呼び出し、MakeDir オブジェクトの Directories プロパティの値を BuildDir プロパティの値と等しくなるよう設定します。

<Target Name="MakeBuildDirectory">
    <MakeDir
        Directories="$(BuildDir)" />
</Target>

また、タスクはプロジェクト ファイルに情報を返すこともできます。この情報は、後で使用するために項目またはプロパティに格納できます。 たとえば、次のコードは Copy タスクを呼び出して、SuccessfullyCopiedFiles 項目一覧に CopiedFiles 出力プロパティからの情報を格納します。

<Target Name="CopyFiles">
    <Copy
        SourceFiles="@(MySourceFiles)"
        DestinationFolder="@(MyDestFolder)">
        <Output
            TaskParameter="CopiedFiles"
            ItemName="SuccessfullyCopiedFiles"/>
     </Copy>
</Target>

含まれるタスク

MSBuild には、ファイルをコピーする Copy、ディレクトリを作成する MakeDir、C# ソース コード ファイルをコンパイルする Csc など、多数のタスクが装備されています。 使用可能なすべてのタスクと使用法については、「タスク リファレンス」をご覧ください。

オーバーライドされたタスク

MSBuild では、いくつかの場所にあるタスクが検索されます。 最初の場所は、MSBuild ディレクトリに格納されている拡張子が .OverrideTasks であるファイル内です。 これらのファイル内のタスクは、プロジェクト ファイル内のタスクも含め、同じ名前を持つ他のタスクをオーバーライドします。 2 番目の場所は、プロジェクト ファイルとそのインポート内です。 タスクがプロジェクトで定義されていない場合は、MSBuild ディレクトリ内の .tasks ファイルで定義されている MSBuild の既定のタスク内で検索されます。