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 クラスのメソッドを呼び出して、ツールセットをプログラムで確認できます。クラスは、これらのメソッドが含まれています:
GetPathToDotNetFramework は、.NET Frameworkフォルダーのパスを返します。
GetPathToDotNetFrameworkFile は、.NET Frameworkフォルダーのファイルのパスを返します。
GetPathToDotNetFrameworkSdk は、マネージ ツールのフォルダーのパスを返します。
GetPathToDotNetFrameworkSdkFile は、マネージ ツールのフォルダーに置かれます。ファイルのパスを返します。
サブ ツールセット
このトピックで前に説明したように、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で導入されました。