MSBuild タスク
別の MSBuild プロジェクトから MSBuild プロジェクトをビルドします。
パラメーター
次の表では、MSBuild
タスクのパラメーターについて説明します。
パラメーター | 説明 |
---|---|
BuildInParallel |
省略可能な Boolean パラメーター。true 場合、可能であれば、Projects パラメーターで指定されたプロジェクトが並列にビルドされます。 既定値は false です。 |
Projects |
必須 ITaskItem[] パラメーターです。ビルドするプロジェクト ファイルを指定します。 |
Properties |
省略可能な String パラメーター。子プロジェクトにグローバル プロパティとして適用するプロパティ名と値のペアのセミコロン区切りのリスト。 このパラメーターを指定すると、MSBuild.exeを使用してビルドするときに、-property スイッチを持つプロパティを設定するのと機能的に同じです。 次に例を示します。 Properties="Configuration=Debug;Optimize=$(Optimize)" Properties パラメーターを使用してプロジェクトにプロパティを渡すと、プロジェクト ファイルが既に読み込まれている場合でも、MSBuild によってプロジェクトの新しいインスタンスが作成されることがあります。 MSBuild は、特定のプロジェクト パスと一意のグローバル プロパティのセットに対して 1 つのプロジェクト インスタンスを作成します。 たとえば、この動作では、Configuration=Release を使用して myproject.proj 呼び出す複数の MSBuild タスクを作成し、myproject.proj の単一のインスタンスを取得できます (タスクで一意のプロパティが指定されていない場合)。 MSBuild でまだ表示されていないプロパティを指定すると、MSBuild によってプロジェクトの新しいインスタンスが作成されます。このインスタンスは、プロジェクトの他のインスタンスと並行してビルドできます。 たとえば、リリース構成は、デバッグ構成と同時にビルドできます。 |
RebaseOutputs |
省略可能な Boolean パラメーター。true 場合、ビルドされたプロジェクトのターゲット出力項目の相対パスは、呼び出し元のプロジェクトに対する相対パスに合わせて調整されます。 既定値は false です。 |
RemoveProperties |
省略可能な String パラメーター。削除するグローバル プロパティのセットを指定します。 |
RunEachTargetSeparately |
省略可能な Boolean パラメーター。true 場合、MSBuild タスクは、MSBuild に渡されたリスト内の各ターゲットを同時に呼び出すのではなく、一度に 1 つずつ呼び出します。 このパラメーターを true に設定すると、以前に呼び出されたターゲットが失敗した場合でも、後続のターゲットが呼び出されます。 それ以外の場合、ビルド エラーは後続のすべてのターゲットの呼び出しを停止します。 既定値は false です。 |
SkipNonexistentProjects |
省略可能な Boolean パラメーター。true 場合、ディスクに存在しないプロジェクト ファイルはスキップされます。 そうしないと、このようなプロジェクトでエラーが発生します。 既定値は false です。 |
SkipNonexistentTargets |
省略可能な Boolean パラメーター。true 場合、名前付き Targets が含まれていないプロジェクト ファイルはスキップされます。 そうしないと、このようなプロジェクトでエラーが発生します。 既定値は false です。 MSBuild 15.5 で導入されました。 |
StopOnFirstFailure |
省略可能な Boolean パラメーター。true 場合、プロジェクトの 1 つがビルドに失敗した場合、それ以上プロジェクトはビルドされません。 現時点では、(複数のプロセッサを使用して) 並列でビルドする場合、このオプションはサポートされていません。 |
TargetAndPropertyListSeparators |
省略可能な String[] パラメーター。ターゲットとプロパティの一覧を項目メタデータとして Project 指定します)。 区切り記号は処理前にエスケープされません。 たとえば、%3B (エスケープされた ';') は、エスケープされていない ';' であるかのように扱われます。 |
TargetOutputs |
オプション ITaskItem[] 読み取り専用出力パラメーターです。すべてのプロジェクト ファイルからビルドされたターゲットの出力を返します。 指定されたターゲットからの出力のみが返され、それらのターゲットが依存しているターゲットに存在する可能性のある出力は返されません。 TargetOutputs パラメーターには、次のメタデータも含まれています。- MSBuildSourceProjectFile : 出力を設定するターゲットを含む MSBuild プロジェクト ファイル。- MSBuildSourceTargetName : 出力を設定するターゲット。
注: 各プロジェクト ファイルまたはターゲットからの出力を個別に識別する場合は、プロジェクト ファイルまたはターゲットごとに MSBuild タスクを個別に実行します。
MSBuild タスクを 1 回だけ実行してすべてのプロジェクト ファイルをビルドすると、すべてのターゲットの出力が 1 つの配列に収集されます。 |
Targets |
省略可能な String パラメーター。プロジェクト ファイルでビルドするターゲットを指定します。 ターゲット名の一覧を区切る場合は、セミコロンを使用します。 MSBuild タスクでターゲットが指定されていない場合は、プロジェクト ファイルで指定された既定のターゲットがビルドされます。
注: ターゲットはすべてのプロジェクト ファイルで実行する必要があります。 そうでない場合は、ビルド エラーが発生します。 |
ToolsVersion |
省略可能な String パラメーター。このタスクに渡されるプロジェクトをビルドするときに使用する ToolsVersion を指定します。MSBuild タスクで、プロジェクトで指定されたバージョンとは異なるバージョンの .NET Framework を対象とするプロジェクトをビルドできるようにします。 有効な値は 2.0 、 3.0 、および 3.5 です。 既定値は、3.5 です。 |
注釈
このタスクは、前に示したパラメーターに加えて、TaskExtension クラスからパラメーターを継承し、それ自体が Task クラスから継承します。 これらの追加パラメーターとその説明の一覧については、「TaskExtension 基底クラスのを参照してください。
MSBuild.exeを開始するために Exec タスク を使用するのとは異なり、このタスクは同じ MSBuild プロセスを使用して子プロジェクトをビルドします。 スキップできる既にビルドされているターゲットの一覧は、親ビルドと子ビルドの間で共有されます。 新しい MSBuild プロセスが作成されないため、このタスクも高速です。
このタスクでは、プロジェクト ファイルだけでなく、ソリューション ファイルも処理できます。 MSBuild 17.12 以降では、.slnx
と .sln
の両方のソリューション ファイル形式が受け入れられます。
構成にリモート インフラストラクチャ (ポート、プロトコル、タイムアウト、再試行など) が含まれている場合でも、プロジェクトを同時にビルドできるようにするために MSBuild で必要な構成は、構成ファイルを使用して構成可能にする必要があります。 可能な場合は、構成項目を MSBuild
タスクのタスク パラメーターとして指定できる必要があります。
MSBuild 3.5 以降、ソリューション プロジェクトは、ビルドするすべてのサブプロジェクトから TargetOutput を表示するようになりました。
プロパティをプロジェクトに渡す
MSBuild 3.5 より前のバージョンの MSBuild では、MSBuild 項目に記載されている異なるプロジェクトに異なるプロパティ セットを渡すことは困難でした。 MSBuild タスクの Properties 属性を使用した場合、その設定は、MSBuild タスク をバッチ処理し、項目一覧のプロジェクトごとに異なるプロパティを条件付きで指定しない限り、ビルドされているすべてのプロジェクトに適用されます。
ただし、MSBuild 3.5 では、2 つの新しい予約済みメタデータ項目である Properties と AdditionalProperties が提供されます。このアイテムを使用すると、MSBuild タスクを使用して、ビルドされるプロジェクトごとに異なるプロパティを柔軟に渡すことができます。
注
これらの新しいメタデータ項目は、MSBuild タスクの Projects 属性で渡された項目にのみ適用されます。
マルチプロセッサ ビルドの利点
この新しいメタデータを使用する主な利点の 1 つは、マルチプロセッサ システムでプロジェクトを並列にビルドするときに発生します。 メタデータを使用すると、バッチ処理または条件付き MSBuild タスクを実行することなく、すべてのプロジェクトを 1 つの MSBuild タスク 呼び出しに統合できます。 また、MSBuild タスク を 1 つだけ呼び出すと、Projects 属性に一覧表示されているすべてのプロジェクトが並列にビルドされます。 (ただし、MSBuild タスクに BuildInParallel=true
属性が存在する場合にのみ。詳細については、「複数のプロジェクトを並列でビルドする」を参照してください。
プロパティのメタデータ
指定すると、Properties メタデータはタスクの Properties パラメーターをオーバーライドし、additionalProperties メタデータ パラメーターの定義に追加されます。
一般的なシナリオは、MSBuild タスクを使用して複数のソリューション ファイルをビルドし、異なるビルド構成のみを使用する場合です。 デバッグ構成を使用してソリューション a1 をビルドし、リリース構成を使用してソリューション a2 をビルドできます。 MSBuild 2.0 では、このプロジェクト ファイルは次のようになります。
注
次の例では、"..."は、追加のソリューション ファイルを表します。
a.proj
<Project xmlns="http://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 メタデータを使用すると、次の例に示すように、1 つの MSBuild タスクを使用するように、このコードを簡略化できます。
a.proj
<Project xmlns="http://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="http://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 つのソリューション ファイルをビルドします。どちらの場合もリリース構成を使用しますが、もう 1 つは x86 アーキテクチャを使用し、もう 1 つは ia64 アーキテクチャを使用します。 MSBuild 2.0 では、MSBuild タスクの複数のインスタンスを作成する必要があります。1 つは x86 アーキテクチャのリリース構成を使用してプロジェクトをビルドし、もう 1 つは ia64 アーキテクチャでリリース構成を使用してプロジェクトをビルドします。 プロジェクト ファイルは次のようになります。
a.proj
<Project xmlns="http://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="http://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="http://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>