MSBuild タスク
更新 : 2007 年 11 月
他の MSBuild プロジェクトから MSBuild プロジェクトをビルドします。
パラメータ
MSBuild タスクのパラメータの説明を次の表に示します。
パラメータ |
説明 |
---|---|
BuildInParallel |
省略可能な Boolean 型のパラメータです。 true に設定すると、可能な場合、Projects パラメータに指定されたプロジェクトが同時にビルドされます。既定値は true です。 |
Projects |
必須の ITaskItem[] 型のパラメータです。 ビルドするプロジェクト ファイルを指定します。 |
Properties |
省略可能な String 型のパラメータです。 子プロジェクトにグローバル プロパティとして適用するプロパティ名と値のペアを、セミコロン (;) で区切って指定します。このパラメータを指定することは、MSBuild.exe でビルドするときに /property スイッチでプロパティを設定することと同じ意味になります。たとえば、次のように指定します。 Properties="Configuration=Debug;Optimize=$(Optimize)" Properties パラメータ経由でプロジェクトにプロパティを渡すと、プロジェクト ファイルが既に読み込まれている場合でも、MSBuild はプロジェクトの新しいインスタンスを作成します。プロジェクトの新しいインスタンスが作成されると、MSBuild はそのインスタンスを、異なるグローバル プロパティを持ち、プロジェクトの他のインスタンスと同時にビルド可能な別のプロジェクトとして扱います。たとえば、リリース構成をデバッグ構成と同時にビルドできます。 |
ToolsVersion |
省略可能な String 型のパラメータです。 プロジェクトで指定されたものとは異なる、.NET Framework の別のバージョンを対象とするプロジェクトをビルドする MSBuild タスクを有効にします。有効値は 2.0、3.0、および 3.5 です。既定値は 3.5です。 |
RebaseOutputs |
省略可能な Boolean 型のパラメータです。 true に設定すると、ビルドするプロジェクトからのターゲットの出力アイテムの相対パスは、呼び出し元プロジェクトからの相対パスに合わせられます。既定値は false です。 |
RunEachTargetSeparately |
省略可能な Boolean 型のパラメータです。 true に設定すると、MSBuild タスクでは、MSBuild に渡された一覧内のターゲットが (同時にではなく) 1 つずつ起動されます。このパラメータを true に設定すると、前に起動したターゲットが失敗しても、以降のターゲットは起動されることが保証されます。それ以外の場合は、ビルド エラーが発生すると、以降のターゲットの起動は停止されます。既定値は false です。 |
StopOnFirstFailure |
省略可能な Boolean 型のパラメータです。 true に設定すると、いずれかのプロジェクトのビルドが失敗した場合に、残りのプロジェクトのビルドが即座に中断されます。 |
TargetOutputs |
省略可能な ITaskItem[] 型の読み取り専用出力パラメータです。 プロジェクト ファイルすべてからビルドされたターゲットの出力が戻ります。指定したターゲットの出力だけが戻ります。指定したターゲットが依存するターゲットが存在しても、それらのターゲットの出力は戻りません。 TargetOutputs パラメータには、次のメタデータも含まれます。
メモ :
各プロジェクト ファイルまたはターゲットの出力を分けるには、プロジェクト ファイルまたはターゲットごとに MSBuild タスクを実行します。MSBuild タスクを 1 度だけ実行してすべてのプロジェクト ファイルをビルドすると、すべてのターゲットが 1 つの配列に格納されます。
|
Targets |
省略可能な String 型のパラメータです。 ターゲットや、プロジェクト ファイルでビルドするターゲットを指定します。ターゲット名の一覧を区切るには、セミコロン (;) を使用します。MSBuild タスクにターゲットを指定しない場合は、プロジェクト ファイルで指定されている既定のターゲットがビルドされます。
メモ :
ターゲットは、すべてのプロジェクト ファイルに必要です。ターゲットが存在しない場合は、ビルド エラーが発生します。
|
解説
Exec タスクを使用して MSBuild.exe を起動する場合と異なり、このタスクでは、同じ MSBuild プロセスで子プロジェクトがビルドされます。ビルド済みであるためスキップできるターゲットの一覧は、親プロジェクトのビルドと子プロジェクトのビルドの両方で共有されます。また、新しい MSBuild プロセスが作成されないため、このタスクは高速です。
このタスクでは、プロジェクト ファイルだけでなく、ソリューション ファイルも処理できます。
プロジェクトを同時にビルドすることを有効にするために MSBuild によって求められる構成は、構成に (ポート、プロトコル、タイムアウト、再試行などの) リモート インフラストラクチャが関連する場合でも、構成ファイルを使用して構成可能にする必要があります。可能であれば、構成項目を MSBuild タスクのタスク パラメータとして指定できるようにします。
MSBuild 3.5 以降、ソリューション プロジェクトは、ビルドするすべてのサブプロジェクトから TargetOutputs を出力するようになりました。
プロジェクトへのプロパティの引き渡し
MSBuild 3.5 以前のバージョンの MSBuild では、MSBuild 項目に一覧が表示されている別のプロジェクトに対してプロパティの別のセットを渡すことは困難でした。MSBuild タスクの Properties 属性を使用すると、MSBuild タスクをバッチ処理し、項目リスト内の各プロジェクトに対して別のプロパティを条件に応じて用意する場合を除き、その設定はビルド対象のすべてのプロジェクトに適用されました。
しかし、MSBuild 3.5 には、新しい予約済みのメタデータ項目が 2 つあります (Properties および AdditionalProperties)。これらのメタデータ項目は、MSBuild タスクを使用してビルドされる別プロジェクトに異なるプロパティを渡すための柔軟な方法を提供します。
メモ : |
---|
これらのメタデータ項目は、MSBuild タスクの Projects 属性に渡される項目に対してのみ適用可能です。 |
マルチプロセッサ上でのビルドの利点
この新しいメタデータを使用する最大の利点の 1 つは、マルチプロセッサ上でプロジェクトを同時にビルドする場合に見られます。メタデータを使用することで、すべてのプロジェクトを単一の MSBuild タスク呼び出しに統合することができます。バッチ処理や条件付き MSBuild タスクを実行する必要はありません。単一の MSBuild タスクだけを呼び出すと、Projects 属性に指定されているすべてのプロジェクトが同時にビルドされます (ただし、BuildInParallel=true 属性が MSBuild タスクに指定されている場合に限定されます)。詳細については、「マルチプロセッサ システムでのビルド」を参照してください。
Properties メタデータ
一般的なシナリオとして、異なるビルド構成を使用する場合にのみ、MSBuild タスクを使用して複数のソリューション ファイルをビルドすることが挙げられます。デバッグ構成を使用してソリューション a1 をビルドし、リリース構成を使用してソリューション a2 をビルドすることができます。MSBuild 2.0 では、このプロジェクト ファイルは次のようになります。
メモ : |
---|
例の中で、"…" はその他のソリューション ファイルを表します。 |
a.proj
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build">
<MSBuild Projects="a1.sln…" Properties="Configuration=Debug"/>
<MSBuild Projects="a2.sln" Properties="Configuration=Release"/>
</Target>
</Project>
ただし、Properties メタデータを使用すると、次の例に示すように、単一の MSBuild タスクを使用して簡素化できます。
a.proj
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectToBuild Include="a1.sln…">
<Properties>Configuration=Debug</Properties>
</ProjectToBuild>
<ProjectToBuild Include="a2.sln">
<Properties>Configuration=Release</Properties>
</ProjectToBuild>
</ItemGroup>
<Target Name="Build">
<MSBuild Projects="@(ProjectToBuild)"/>
</Target>
</Project>
または
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectToBuild Include="a1.sln…"/>
<ProjectToBuild Include="a2.sln">
<Properties>Configuration=Release</Properties>
</ProjectToBuild>
</ItemGroup>
<Target Name="Build">
<MSBuild Projects="@(ProjectToBuild)"
Properties="Configuration=Debug"/>
</Target>
</Project>
AdditionalProperties メタデータ
MSBuild タスクを使用して 2 つのソリューション ファイルをビルドするシナリオを考えます。いずれのソリューション ファイルでもリリース構成を使用しますが、一方は x86 アーキテクチャ、もう一方は ia64 アーキテクチャを使用します。MSBuild 2.0 では、MSBuild タスクの複数のインスタンスを作成する必要があります。一方は x86 アーキテクチャに基づいたリリース構成を使用してプロジェクトをビルドし、もう一方は ia64 アーキテクチャに基づいたリリース構成を使用してプロジェクトをビルドします。プロジェクト ファイルは次のようになります。
a.proj
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Build">
<MSBuild Projects="a1.sln…" Properties="Configuration=Release;
Architecture=x86"/>
<MSBuild Projects="a2.sln" Properties="Configuration=Release;
Architecture=ia64"/>
</Target>
</Project>
AdditionalProperties メタデータを使用すると、次のコードを使用することによって、単一の MSBuild タスクを使用して簡素化できます。
a.proj
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectToBuild Include="a1.sln…">
<AdditionalProperties>Architecture=x86
</AdditionalProperties>
</ProjectToBuild>
<ProjectToBuild Include="a2.sln">
<AdditionalProperties>Architecture=ia64
</AdditionalProperties>
</ProjectToBuild>
</ItemGroup>
<Target Name="Build">
<MSBuild Projects="@(ProjectToBuild)"
Properties="Configuration=Release"/>
</Target>
</Project>
使用例
次の例では、MSBuild タスクを使用して、ProjectReferences アイテム コレクションで指定されたプロジェクトをビルドしています。ターゲットの出力結果は、AssembliesBuiltByChildProjects アイテム コレクションに格納されます。
<Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ProjectReferences Include="*.*proj" />
</ItemGroup>
<Target Name="BuildOtherProjects">
<MSBuild
Projects="@(ProjectReferences)"
Targets="Build">
<Output
TaskParameter="TargetOutputs"
ItemName="AssembliesBuiltByChildProjects" />
</MSBuild>
</Target>
</Project>