次の方法で共有


MSBuild ツールセット (ToolsVersion)

MSBuild は、タスク、ターゲット、およびツールのツールセットをアプリケーションを構築して使用します。通常、MSBuild のツールセットには、csc.exeやvbc.exeなどのmicrosoft.common.tasksファイル、microsoft.common.targetsのファイルとコンパイラが含まれます。ほとんどのツールセットが.NET Frameworkの複数のバージョンおよび複数のシステム プラットフォームでアプリケーションをコンパイルするために使用できます。ただし、.NET Framework 2.0を対象とする場合、MSBuild 2.0のツールセットを使用できます。

ToolsVersion 属性

プロジェクト ファイルの プロジェクト の要素で ToolsVersion の属性でツールセットを指定します。次の例では、プロジェクトでMSBuild 2.0のツールセットを使用してビルドすることを指定しています。

<Project ToolsVersion="2.0" ... </Project>

ToolsVersion 属性の動作

Visual Studioのプロジェクトを作成するか、既存のプロジェクトをアップグレードするとき、ToolsVersion という属性がプロジェクト ファイルに自動的に追加され、値はVisual Studioのエディションに付属している.NET Frameworkのバージョンに対応します。詳細については、「対象となる特定の .NET Framework のバージョンまたはプロファイルの指定」を参照してください。

ToolsVersion の値がプロジェクト ファイルに定義すると、プロジェクトに使用できるツールセットのプロパティの値を調べるに評価するMSBuildの使用。.NET Frameworkツールのパスを指定する1のツールセットのプロパティは $(MSBuildToolsPath)です。このツールセットのプロパティ (または $(MSBuildBinPath)のみ)、要求されます。

次の例では、MSBuildは保持 MSBuildToolsPath プロパティを使用してMicrosoft.CSharp.targetsファイルを検索します。

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

カスタム ツールセットを定義することで MSBuildToolsPath の値を変更できます。詳細については、「標準ツールセット構成とカスタム ツールセット構成」を参照してください。

コマンド ラインのソリューションをビルドする場合、msbuild.exeに対して ToolsVersion を指定すると、ソリューション内の各プロジェクトが独自の ToolsVersionを指定しても、すべてのプロジェクトとそのプロジェクト間の依存関係は、ToolsVersionに従ってビルドします。プロジェクトごとの ToolsVersion の値を定義するには、ToolsVersion 設定のオーバーライドを参照してください。

ToolsVersion の属性は、プロジェクトの移行のために使用されます。たとえば、Visual Studio 2010のVisual Studio 2008のプロジェクトを開くToolsVersion=」4.0 "が含まれるように、プロジェクト ファイルが更新されます。次に、Visual Studio 2008のプロジェクトを開こうとすると、属性がまだ3.5に設定されているかのようにアップグレードした ToolsVersion を認識しないため、プロジェクトをビルドします。

Visual Studio 2010とVisual Studio 2012の両方が4.0のToolsVersionを使用します。多くの場合、変更せずにVisual Studioの両方のバージョンのプロジェクトを開くことができます。

この後で説明するサブ ツールセットは、ビルドが実行されるコンテキストに基づいて使用するMSBuildツールの設定が自動的に切り替えるようにします。たとえば、MSBuildは、Visual Studio 2010で実行する場合、Visual Studio 2012でプロジェクト ファイルを変更せずにより明示的に実行すると新しい一連のツールを使用します。詳細については、「方法: プロジェクトが Visual Studio の複数のバージョンで読み込むようにプロジェクト システムを変更する」を参照してください。

ツールセットの実装

ツールセットを構成するさまざまなツール、ターゲット、およびタスクのパスを選択して、ツールセットを実装します。MSBuildが定義するツールセットのツールは次のソースから取得しています:

  • .NET Frameworkフォルダー。

  • 追加のマネージ ツール。

マネージ ツールはResGen.exe、Tlbimp.exeが含まれます。

MSBuildはツールセットにアクセスする2とおりの方法が用意されています:

  • ツールセットのプロパティを使用して、

  • ToolLocationHelper のメソッドを使用して

ツールセットのプロパティは、ツールのパスを指定します。MSBuildは、プロジェクト ファイルに対応するレジストリ キーの検索に ToolsVersion の属性の値を使用してレジストリ キーにツールセットのプロパティを設定する情報を使用します。たとえば、ToolsVersion に値 4.0がある場合、MSBuildは、レジストリ キーに従ってツールセットのプロパティを設定します: HKLM\Software\Microsoft\MSBuild\ToolsVersions\4.0.

これらは、ツールセットのプロパティです:

  • MSBuildToolsPath は、.NET Frameworkツールのパスを指定します。

  • SDK40ToolsPath は、MSBuild 4.0の追加のマネージ ツールのパスを指定します。

  • SDK35ToolsPath は、MSBuild 3.5の追加のマネージ ツールのパスを指定します。

また、ToolLocationHelper クラスのメソッドを呼び出して、ツールセットをプログラムで確認できます。クラスは、これらのメソッドが含まれています:

Bb383796.collapse_all(ja-jp,VS.110).gifサブ ツールセット

このトピックで前に説明したように、MSBuildは基本的なツールのパスを指定するには、レジストリ キーを使用します。キーにサブキーがある場合、MSBuildは追加のツールを含むサブ ツールセットのパスを指定する場合に使用します。この場合、ツールセットは両方のキーで定義されたプロパティ定義の結合によって定義されます。

[!メモ]

ツールセットのプロパティ名が競合して、サブキーのパスに対して定義されている値はルート キーのパスに対して定義された値をオーバーライドします。

サブ ツールセットは VisualStudioVersion のビルド プロパティの前にアクティブになります。このプロパティは、これらの値から1を受け取る可能性があります:

  • 「10.0」は.NET Framework 4のサブ ツールセットを指定します

  • 「11.0」は.NET Framework 4.5のサブ ツールセットを指定します

ビルド中に、MSBuildは自動的に定義する必要 VisualStudioVersion プロパティの既定値を決定し、設定します。

MSBuildはパラメーターとして VisualStudioVersion の列挙値を追加 ToolLocationHelper メソッドのオーバーロードが用意されています。また、MSBuildは追加のネイティブ ツールのパスを返すために、これらの新しいメソッドが用意されています:

  • GetPathToWindowsSdk

  • GetPathToWindowsSdkFile

これらの新しいメソッドには、使用するサブ ツールセットを決定するためにパラメーターとして VisualStudioVersion の列挙値を受け取ります。VisualStudioVersion の列挙型には、次の値を1である可能性があります:

  • VisualStudio10

  • VisualStudio11

  • VisualStudioLatest

サブ ツールセットは.NET Framework 4.5で導入されました。

参照

概念

標準ツールセット構成とカスタム ツールセット構成

その他の技術情報

MSBuild のマルチ ターゲットの概要