MSBuild タスクMSBuild Task

別の MSBuildMSBuild プロジェクトから MSBuildMSBuild プロジェクトをビルドします。Builds MSBuildMSBuild projects from another MSBuildMSBuild project.

パラメーターParameters

MSBuild タスクのパラメーターの説明を次の表に示します。The following table describes the parameters of the MSBuild task.

パラメーターParameter 説明Description
BuildInParallel 省略可能な Boolean 型のパラメーターです。Optional Boolean parameter.

true の場合、Projects パラメーターに指定されたプロジェクトが同時にビルドされます (可能な場合)。If true, the projects specified in the Projects parameter are built in parallel if it is possible. 既定値は false です。Default is false.
Projects 必須の ITaskItem[] 型のパラメーターです。Required ITaskItem[] parameter.

ビルドするプロジェクト ファイルを指定します。Specifies the project files to build.
Properties 省略可能な String 型のパラメーターです。Optional String parameter.

子プロジェクトに対してグローバル プロパティとして適用するプロパティの名前/値ペアのセミコロンで区切られたリスト。A semicolon-delimited list of property name/value pairs to apply as global properties to the child project. このパラメーターを指定することは、MSBuild.exe でビルドするときに /property スイッチを持つプロパティを設定することと同じ意味になります。When you specify this parameter, it is functionally equivalent to setting properties that have the /property switch when you build with MSBuild.exe. 例:For example:

Properties="Configuration=Debug;Optimize=$(Optimize)"

Properties パラメーター経由でプロジェクトにプロパティを渡すと、プロジェクト ファイルが既に読み込まれている場合でも、MSBuildMSBuild はプロジェクトの新しいインスタンスを作成します。When you pass properties to the project through the Properties parameter, MSBuildMSBuild creates a new instance of the project even if the project file has already been loaded. プロジェクトの新しいインスタンスが作成されると、MSBuildMSBuild はそのインスタンスを、異なるグローバル プロパティを持ち、プロジェクトの他のインスタンスと同時にビルド可能な別のプロジェクトとして扱います。When a new instance of the project has been created, MSBuildMSBuild treats it as a different project that has different global properties and that can be built in parallel with other instances of the project. たとえば、リリース構成をデバッグ構成と同時にビルドできます。For example, a Release configuration could build at the same time as a Debug configuration.
RebaseOutputs 省略可能な Boolean 型のパラメーターです。Optional Boolean parameter.

true の場合、ビルド プロジェクトからのターゲットの出力項目の相対パスを、呼び出し元プロジェクトからの相対パスに合わせます。If true, the relative paths of target output items from the built projects have their paths adjusted to be relative to the calling project. 既定値は false です。Default is false.
RemoveProperties 省略可能な String 型のパラメーターです。Optional String parameter.

削除するグローバル プロパティのセットを指定します。Specifies the set of global properties to remove.
RunEachTargetSeparately 省略可能な Boolean 型のパラメーターです。Optional Boolean parameter.

true の場合、MSBuildMSBuild タスクは MSBuildMSBuild に渡される一覧内の各ターゲットを同時ではなく、一度に 1 つずつ呼び出します。If true, the MSBuildMSBuild task invokes each target in the list passed to MSBuildMSBuild one at a time, instead of at the same time. このパラメーターを true に設定すると、前に呼び出したターゲットが失敗しても、後に続くターゲットは呼び出されることが保証されます。Setting this parameter to true guarantees that subsequent targets are invoked even if previously invoked targets failed. それ以外の場合は、ビルド エラーが発生すると、以降のすべてのターゲットの呼び出しは停止されます。Otherwise, a build error would stop invocation of all subsequent targets. 既定値は false です。Default is false.
SkipNonexistentProjects 省略可能な Boolean 型のパラメーターです。Optional Boolean parameter.

true の場合、ディスク上に存在しないプロジェクト ファイルはスキップされます。If true, project files that do not exist on the disk will be skipped. それ以外の場合は、そのようなプロジェクトによりエラーが発生します。Otherwise, such projects will cause an error.
StopOnFirstFailure 省略可能な Boolean 型のパラメーターです。Optional Boolean parameter.

true の場合、プロジェクトの 1 つがビルドに失敗すると、プロジェクトはそれ以上ビルドされません。If true, when one of the projects fails to build, no more projects will be built. この機能は現在、同時にビルド (複数のプロセッサを使用) する際にはサポートされていません。Currently this is not supported when building in parallel (with multiple processors).
TargetAndPropertyListSeparators 省略可能な String[] 型のパラメーターです。Optional String[] parameter.

Project 項目メタデータとしてターゲットとプロパティのリストを指定します。Specifies a list of targets and properties as Project item metadata). 区切り記号は、処理の前にエスケープ解除されます。Separators will be un-escaped before processing. たとえば、%3B (エスケープされた ';') はエスケープされていない ';' のように扱われます。e.g. %3B (an escaped ';') will be treated as if it were an un-escaped ';'.
TargetOutputs 省略可能な ITaskItem[] 型の読み取り専用の出力パラメーターです。Optional ITaskItem[] read-only output parameter.

すべてのプロジェクト ファイルからビルドされたターゲットの出力を返します。Returns the outputs of the built targets from all the project files. 指定したターゲットの出力だけが返されます。それらのターゲットが依存しているターゲットに存在する可能性があるすべての出力が返されるわけではありません。Only the outputs from the targets that were specified are returned, not any outputs that may exist on targets that those targets depend on.

TargetOutputs パラメーターには、次のメタデータも含まれています。The TargetOutputs parameter also contains the following metadata:

- MSBuildSourceProjectFile: 出力を設定するターゲットを含む MSBuildMSBuild プロジェクト ファイル。- MSBuildSourceProjectFile: The MSBuildMSBuild project file that contains the target that set the outputs.
- MSBuildSourceTargetName: 出力を設定するターゲット。- MSBuildSourceTargetName: The target that set the outputs. 注: 各プロジェクト ファイルまたはターゲットの出力を個別に識別する場合は、プロジェクト ファイルまたはターゲットごとに MSBuild タスクを実行します。Note: If you want to identify the outputs from each project file or target separately, run the MSBuild task separately for each project file or target. MSBuild タスクを 1 回だけ実行してすべてのプロジェクト ファイルをビルドすると、すべてのターゲットの出力が 1 つの配列に収集されます。If you run the MSBuild task only once to build all the project files, the outputs of all the targets are collected into one array.
Targets 省略可能な String 型のパラメーターです。Optional String parameter.

プロジェクト ファイルでビルドする 1 つまたは複数のターゲットを指定します。Specifies the target or targets to build in the project files. セミコロンを使用して、ターゲットの名前の一覧を区切ります。Use a semicolon to separate a list of target names. MSBuild タスクにターゲットを指定しない場合は、プロジェクト ファイルで指定されている既定のターゲットがビルドされます。If no targets are specified in the MSBuild task, the default targets specified in the project files are built. 注: ターゲットは、すべてのプロジェクト ファイルに必要です。Note: The targets must occur in all the project files. ターゲットが存在しない場合は、ビルド エラーが発生します。If they do not, a build error occurs.
ToolsVersion 省略可能な String 型のパラメーターです。Optional String parameter.

このタスクに渡されたプロジェクトのビルド時に使用する ToolsVersion を指定します。Specifies the ToolsVersion to use when building projects passed to this task.

MSBuildMSBuild タスクが、プロジェクトで指定されたものとは別のバージョンの .NET Framework.NET Framework をターゲットとするプロジェクトをビルドできるようにします。Enables an MSBuildMSBuild task to build a project that targets a different version of the .NET Framework.NET Framework than the one specified in the project. 有効な値は 2.03.03.5 です。Valid values are 2.0, 3.0 and 3.5. 既定値は 3.5 です。Default value is 3.5.
UnloadProjectsOnCompletion 省略可能な Boolean 型のパラメーターです。Optional Boolean parameter.

true の場合、操作が完了したらプロジェクトはアンロードされます。If true, the project will be unloaded once the operation is complete.
UseResultsCache 省略可能な Boolean 型のパラメーターです。Optional Boolean parameter.

true の場合、キャッシュされた結果が返されます (ある場合)。If true, the cached result will be returned, if present. MSBuild タスクが実行された場合、その結果はスコープ (ProjectFileName, GlobalProperties)[TargetNames] にIf theMSBuild task is run, its result will be cached in a scope (ProjectFileName, GlobalProperties)[TargetNames]

ビルド項目のリストとしてキャッシュされます。as a list of build items

コメントRemarks

上記のパラメーター以外に、このタスクは TaskExtension クラスからパラメーターを継承します。このクラス自体は、Task クラスから継承されます。In addition to the parameters listed above, this task inherits parameters from the TaskExtension class, which itself inherits from the Task class. これらの追加のパラメーターの一覧とその説明については、「 TaskExtension Base Class」を参照してください。For a list of these additional parameters and their descriptions, see TaskExtension Base Class.

Exec Task を使用して MSBuild.exe を起動する場合と異なり、このタスクでは、同じ MSBuildMSBuild プロセスを使用して子プロジェクトがビルドされます。Unlike using the Exec Task to start MSBuild.exe, this task uses the same MSBuildMSBuild process to build the child projects. すでにビルドされていて、スキップできるターゲットの一覧は、親のビルドと子のビルドの両方で共有されます。The list of already-built targets that can be skipped is shared between the parent and child builds. また、新しい MSBuildMSBuild プロセスが作成されないため、このタスクは高速です。This task is also faster because no new MSBuildMSBuild process is created.

このタスクでは、プロジェクト ファイルだけでなく、ソリューション ファイルも処理できます。This task can process not only project files but also solution files.

プロジェクトを同時にビルドできるようにするために MSBuildMSBuild によって求められる構成は、構成に (ポート、プロトコル、タイムアウト、再試行などの) リモート インフラストラクチャが関連する場合でも、構成ファイルを使用して構成可能にする必要があります。Any configuration that is required by MSBuildMSBuild to enable projects to build at the same time, even if the configuration involves remote infrastructure (for example, ports, protocols, timeouts, retries, and so forth), must be made configurable by using a configuration file. 可能であれば、構成項目を MSBuild タスクのタスク パラメーターとして指定できるようにします。When possible, configuration items should be able to be specified as task parameters on the MSBuild task.

MSBuildMSBuild 3.5 以降、ソリューション プロジェクトは、ビルドするすべてのサブ プロジェクトから TargetOutputs を出力するようになりました。Beginning in MSBuildMSBuild 3.5, Solution projects now surface TargetOutputs from all of the sub-projects it builds.

プロジェクトへのプロパティの引き渡しPassing Properties to Projects

MSBuildMSBuild 3.5 以前のバージョンの MSBuildMSBuild では、MSBuildMSBuild 項目に一覧表示されている別のプロジェクトに対してプロパティの別のセットを渡すことは困難でした。In versions of MSBuildMSBuild prior to MSBuildMSBuild 3.5, passing different sets of properties to different projects listed in the MSBuildMSBuild item was challenging. MSBuild タスクの Properties 属性を使用すると、その設定はビルド対象のすべてのプロジェクトに適用されていました (ただし、MSBuild タスクをバッチ処理し、項目一覧内の各プロジェクトに対して別のプロパティを条件に応じて用意する場合は除く)。If you used the Properties attribute of the MSBuild Task, then its setting was applied to all of the projects being built unless you batched the MSBuild Task and conditionally provided different properties for each project in the item list.

しかし、MSBuildMSBuild 3.5 には、新しい予約済みのメタデータ項目が 2 つあります (Properties と AdditionalProperties)。これらのメタデータ項目は、MSBuild タスクを使用してビルドされる別プロジェクトに異なるプロパティを渡すための柔軟な方法を提供します。MSBuildMSBuild 3.5, however, provides two new reserved metadata items, Properties and AdditionalProperties, that provide you a flexible way to pass different properties for different projects being built using the MSBuild Task.

注意

これらの新しいメタデータ項目は、MSBuild タスクの Projects 属性に渡される項目に対してのみ適用可能です。These new metadata items are applicable only to items passed in the Projects attribute of the MSBuild Task.

マルチプロセッサ ビルドの利点Multi-Processor Build Benefits

この新しいメタデータを使用する最大の利点の 1 つを享受できるのは、マルチプロセッサ システム上でプロジェクトを同時にビルドする場合です。One of the major benefits of using this new metadata occurs when you build your projects in parallel on a multi-processor system. メタデータを使用することで、すべてのプロジェクトを単一の MSBuild タスク呼び出しに統合することができます。バッチ処理や条件付き MSBuildMSBuild タスクを実行する必要はありません。The metadata allows you to consolidate all projects into a single MSBuild Task call without having to perform any batching or conditional MSBuildMSBuild tasks. 単一の MSBuild タスクを呼び出すだけで、Projects 属性に指定されているすべてのプロジェクトが同時にビルドされます。And when you call only a single MSBuild Task, all of the projects listed in the Projects attribute will be built in parallel. (ただし、BuildInParallel=true 属性が MSBuild タスクに指定されている場合に限定されます。)詳細については、「複数のプロジェクトの並行ビルド」を参照してください。(Only, however, if the BuildInParallel=true attribute is present in the MSBuild Task.) For more information, see Building Multiple Projects in Parallel.

Properties メタデータProperties Metadata

一般的なシナリオとして、MSBuild タスクを使用し、ビルド構成だけは異なるものを使用して、複数のソリューション ファイルをビルドすることが挙げられます。A common scenario is when you are building multiple solution files using the MSBuild Task, only using different build configurations. デバッグ構成を使用してソリューション a1 をビルドし、リリース構成を使用してソリューション a2 をビルドすることができます。You may want to build solution a1 using the Debug configuration and solution a2 using the Release configuration. MSBuildMSBuild 2.0 では、このプロジェクト ファイルは次のようになります。In MSBuildMSBuild 2.0, this project file would look like the following:

注意

次の例で、"…" はその他のソリューション ファイルを表します。In the following example, "..." represents additional solution files.

a.proja.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 メタデータを使用すると、次の例に示すように、単一の MSBuild タスクを使用して簡素化できます。By using the Properties metadata, however, you can simplify this to use a single MSBuild Task, as shown by the following:

a.proja.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>  

- または- or -

<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 メタデータAdditionalProperties Metadata

MSBuild タスクを使用して 2 つのソリューション ファイルをビルドするシナリオを考えます。いずれのソリューション ファイルでもリリース構成を使用しますが、一方は x86 アーキテクチャ、もう一方は ia64 アーキテクチャを使用します。Consider the following scenario where you are building two solution files using the MSBuild Task, both using the Release configuration, but one using the x86 architecture and the other using the ia64 architecture. MSBuildMSBuild 2.0 では、MSBuild タスクの複数のインスタンスを作成する必要があります。一方は x86 アーキテクチャに基づいたリリース構成を使用してプロジェクトをビルドし、もう一方は ia64 アーキテクチャに基づいたリリース構成を使用してプロジェクトをビルドします。In MSBuildMSBuild 2.0, you would need to create multiple instances of the MSBuild Task: one to build the project using the Release configuration with the x86 Architecture, the other using the Release configuration with the ia64 architecture. プロジェクト ファイルは次のようになります。Your project file would look like the following:

a.proja.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 タスクを使用して簡素化できます。By using the AdditionalProperties metadata, you can simplify this to use a single MSBuild Task by using the following:

a.proja.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>  

Example

次の例では、MSBuild タスクを使用して、ProjectReferences 項目コレクションで指定されたプロジェクトをビルドしています。The following example uses the MSBuild task to build the projects specified by the ProjectReferences item collection. ターゲットの出力結果は、AssembliesBuiltByChildProjects 項目コレクションに格納されます。The resulting target outputs are stored in the AssembliesBuiltByChildProjects item collection.

<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>  

関連項目See Also

タスク Tasks
Task Reference (タスク リファレンス)Task Reference