MSBuild ツールセット (ToolsVersion)MSBuild Toolset (ToolsVersion)

MSBuild は、タスク、ターゲット、およびツールのツールセットを使用して、アプリケーションをビルドします。MSBuild uses a Toolset of tasks, targets, and tools to build an application. 通常、MSBuild ツールセットには、microsoft.common.tasks ファイル、microsoft.common.targets ファイル、および csc.exe や vbc.exe などのコンパイラが含まれています。Typically, a MSBuild Toolset includes a microsoft.common.tasks file, a microsoft.common.targets file, and compilers such as csc.exe and vbc.exe. ほとんどのツールセットは、複数のバージョンの .NET Framework や複数のシステム プラットフォームを対象としてアプリケーションをコンパイルするために使用できます。Most Toolsets can be used to compile applications to more than one version of the .NET Framework and more than one system platform. ただし、MSBuild 2.0 ツールセットは .NET Framework 2.0 のみを対象として使用できます。However, the MSBuild 2.0 Toolset can be used to target only the .NET Framework 2.0.

ToolsVersion 属性ToolsVersion Attribute

プロジェクト ファイルにある Project 要素の ToolsVersion 属性でツールセットを指定します。Specify the Toolset in the ToolsVersion attribute on the Project element in the project file. 次の例では、MSBuild 15.0 ツールセットを使用してプロジェクトをビルドすることを指定します。The following example specifies that the project should be built by using the MSBuild 15.0 Toolset.

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

注意

一部のプロジェクトの種類は、ToolsVersion の代わりに sdk 属性を使います。Some project types use the sdk attribute instead of ToolsVersion. 詳細については、「パッケージ、メタパッケージ、フレームワーク」および「.NET Core の csproj 形式に追加されたもの」を参照してください。For more information, see Packages, Metadata, and Frameworks and Additions to the csproj format for .NET Core.

ToolsVersion 属性の動作How the ToolsVersion Attribute Works

Visual Studio でプロジェクトを作成するとき、または既存のプロジェクトをアップグレードするときに、ToolsVersion という名前の属性が自動的にプロジェクト ファイルに含まれ、その値は、Visual Studio エディションに付属している MSBuild のバージョンに対応します。When you create a project in Visual Studio, or upgrade an existing project, an attribute named ToolsVersion is automatically included in the project file and its value corresponds to the version of MSBuild that is included in the Visual Studio edition. 詳細については、「対象となる特定の .NET Framework のバージョンの指定」を参照してください。For more information, see Targeting a Specific .NET Framework Version.

ToolsVersion の値をプロジェクト ファイルで定義すると、MSBuild ではその値に基づいて、プロジェクトで使用できるツールセットのプロパティの値を判別します。When a ToolsVersion value is defined in a project file, MSBuild uses that value to determine the values of the Toolset properties that are available to the project. ツールセットのプロパティの 1 つに $(MSBuildToolsPath) があります。このプロパティは、.NET Framework ツールのパスを指定します。One Toolset property is $(MSBuildToolsPath), which specifies the path of the .NET Framework tools. このツールセットのプロパティ (または $(MSBuildBinPath)) は、唯一の必須のプロパティです。Only that Toolset property (or $(MSBuildBinPath)), is required.

Visual Studio 2013 以降、MSBuild ツールセットのバージョンは Visual Studio のバージョン番号と同じになりました。Starting in Visual Studio 2013, the MSBuild Toolset version is the same as the Visual Studio version number. プロジェクト ファイルで指定されたツールセットのバージョンにかかわりなく、MSBuild は Visual Studio 内とコマンド ラインでこのツールセットを既定として使用します。MSBuild defaults to this Toolset within Visual Studio and on the command line, regardless of the toolset version specified in project file. この動作は、/ToolsVersion フラグを使用してオーバーライドできます。This behavior can be overridden by using the /ToolsVersion flag. 詳細については、「ToolsVersion 設定をオーバーライドする」を参照してください。For more information, see Overriding ToolsVersion Settings.

次の例では、MSBuild は MSBuildToolsPath 予約済みプロパティを使用して Microsoft.CSharp.targets ファイルを検索します。In the following example, MSBuild finds the Microsoft.CSharp.targets file by using the MSBuildToolsPath reserved property.

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

MSBuildToolsPath の値を変更するには、カスタム ツールセットを定義します。You can modify the value of MSBuildToolsPath by defining a custom Toolset. 詳細については、「標準ツールセット構成とカスタム ツールセット構成」を参照してください。For more information, see Standard and Custom Toolset Configurations

ソリューションをコマンド ラインでビルドするとき、msbuild.exe に対して ToolsVersion を指定すると、すべてのプロジェクトとそのプロジェクト間の依存関係がその ToolsVersion に基づいてビルドされます。ソリューション内の各プロジェクトで固有の ToolsVersion が指定されていても、その値は無視されます。When you build a solution on the command line and specify a ToolsVersion for msbuild.exe, all projects and their project-to-project dependencies are built according to that ToolsVersion, even if each project in the solution specifies its own ToolsVersion. プロジェクトごとに ToolsVersion 値を定義する場合は、「ToolsVersion 設定のオーバーライド」を参照してください。To define the ToolsVersion value on a per project basis, see Overriding ToolsVersion Settings.

ToolsVersion 属性はプロジェクトの移行でも使用されます。The ToolsVersion attribute is also used for project migration. たとえば、Visual Studio 2010 で Visual Studio 2008 プロジェクトを開く場合、プロジェクト ファイルは ToolsVersion="4.0" を含むように更新されます。For example, if you open a Visual Studio 2008 project in Visual Studio 2010, the project file is updated to include ToolsVersion="4.0". 次に、そのプロジェクトを Visual Studio 2008 で開こうとすると、アップグレードされた ToolsVersion は認識されないため、プロジェクトは属性が 3.5 に設定された場合と同様にビルドされます。If you then try to open that project in Visual Studio 2008, it doesn't recognize the upgraded ToolsVersion and therefore builds the project as though the attribute was still set to 3.5.

Visual Studio 2010 と Visual Studio 2012 は、4.0 の ToolsVersion を使用します。Visual Studio 2010 and Visual Studio 2012 use a ToolsVersion of 4.0. Visual Studio 2013 は、12.0 の ToolsVersion を使用します。Visual Studio 2013 uses a ToolsVersion of 12.0. Visual Studio 2015 は ToolsVersion 14.0 を使用し、Visual Studio 2017 は ToolsVersion 15.0 を使用します。Visual Studio 2015 uses ToolsVersion 14.0, and Visual Studio 2017 uses ToolsVersion 15.0. 多くの場合、複数のバージョンの Visual Studio でプロジェクトを開くことができます。変更する必要はありません。In many cases, you can open the project in multiple versions of Visual Studio without modification. Visual Studio は常に正しいツールセットを使用しますが、使用されているバージョンがプロジェクト ファイルのバージョンと一致しない場合は、そのことが通知されます。Visual Studio always uses the correct Toolset, but you will be notified if the version used does not match the version in the project file. ほとんどの場合、ツールセットには互換性があるため、この警告は問題にはなりません。In almost all cases, this warning is benign as the Toolsets are compatible in most cases.

このトピックの後半で説明するサブツールセットを使用すると、MSBuild では、ビルドが実行されるコンテキストに基づいて、使用するツールのセットを自動的に切り替えることができます。Sub-toolsets, which are described later in this topic, allow MSBuild to automatically switch which set of tools to use based on the context in which the build is being run. たとえば、プロジェクト ファイルを明示的に変更しなくても、MSBuild では、Visual Studio 2010 での実行時に Visual Studio 2010 での実行時よりも新しいツールのセットを使用できるようになります。For example, MSBuild uses a newer set of tools when it's run in Visual Studio 2012 than when it's run in Visual Studio 2010, without your having to explicitly change the project file.

ツールセットの実装Toolset Implementation

ツールセットを実装するには、ツールセットを構成するさまざまなツール、ターゲット、およびタスクのパスを選択します。Implement a Toolset by selecting the paths of the various tools, targets, and tasks that make up the Toolset. MSBuild で定義されるツールセットに含まれるツールは、次のソースから取得されます。The tools in the Toolset that MSBuild defines come from the following sources:

  • .NET Framework フォルダーThe .NET Framework folder.

  • 追加のマネージ ツールAdditional managed tools.

    マネージ ツールには ResGen.exe と TlbImp.exe があります。The managed tools include ResGen.exe and TlbImp.exe.

    MSBuild には、ツールセットにアクセスするための 2 つの方法が用意されています。MSBuild provides two ways to access the Toolset:

  • ツールセットのプロパティの使用By using Toolset properties

  • ToolLocationHelper メソッドの使用By using ToolLocationHelper methods

    ツールセットのプロパティは、ツールのパスを指定します。Toolset properties specify the paths of the tools. Visual Studio 2017 以降、MSBuild には決まった場所はなくなりました。Starting in Visual Studio 2017, MSBuild no longer has a fixed location. 既定では、Visual Studio のインストール場所を基準とする MSBuild\15.0\Bin フォルダーに格納されます。By default, it is located in the MSBuild\15.0\Bin folder relative to the Visual Studio installation location. 以前のバージョンでは、MSBuild はプロジェクト ファイル内にある ToolsVersion 属性の値を使って、対応するレジストリ キーを検索します。その後、レジストリ キーの情報を使って、ツールセットのプロパティを設定します。In earlier versions, MSBuild uses the value of the ToolsVersion attribute in the project file to locate the corresponding registry key, and then uses the information in the registry key to set the Toolset properties. たとえば、ToolsVersion の値が 12.0 である場合、MSBuild は、レジストリ キー (HKLM\Software\Microsoft\MSBuild\ToolsVersions\12.0) に従ってツールセットのプロパティを設定します。For example, if ToolsVersion has the value 12.0, then MSBuild sets the Toolset properties according to this registry key: HKLM\Software\Microsoft\MSBuild\ToolsVersions\12.0.

    ツールセットのプロパティを次に示します。These are Toolset properties:

  • MSBuildToolsPath: MSBuild のバイナリのパスを指定します。MSBuildToolsPath specifies the path of the MSBuild binaries.

  • SDK40ToolsPath は、MSBuild 4.x (4.0 または 4.5) に必要な追加のマネージ ツールのパスを指定します。SDK40ToolsPath specifies the path of additional managed tools for MSBuild 4.x (which could be 4.0 or 4.5).

  • SDK35ToolsPath: MSBuild 3.5 に必要な追加のマネージ ツールのパスを指定します。SDK35ToolsPath specifies the path of additional managed tools for MSBuild 3.5.

    また、ToolLocationHelper クラスのメソッドを呼び出すことによって、ツールセットをプログラムで確認することもできます。Alternately, you can determine the Toolset programmatically by calling the methods of the ToolLocationHelper class. このクラスには、次のメソッドが含まれています。The class includes these methods:

  • GetPathToDotNetFramework: .NET Framework フォルダーのパスを返します。GetPathToDotNetFramework returns the path of the .NET Framework folder.

  • GetPathToDotNetFrameworkFile: .NET Framework フォルダーに格納されているファイルのパスを返します。GetPathToDotNetFrameworkFile returns the path of a file in the .NET Framework folder.

  • GetPathToDotNetFrameworkSdk: マネージ ツール フォルダーのパスを返します。GetPathToDotNetFrameworkSdk returns the path of the managed tools folder.

  • GetPathToDotNetFrameworkSdkFile: マネージ ツール フォルダーに通常格納されているファイルのパスを返します。GetPathToDotNetFrameworkSdkFile returns the path of a file, which is typically located in the managed tools folder.

  • GetPathToBuildTools は、ビルド ツールのパスを返します。GetPathToBuildTools returns the path of the build tools.

サブツールセットSub-toolsets

15.0 より前のバージョンの MSBuild は、レジストリ キーを使って基本ツールのパスを指定します。For versions MSBuild prior to 15.0, MSBuild uses a registry key to specify the path of the basic tools. キーにサブキーがある場合、MSBuild ではそのサブキーを使用して、追加のツールを含むサブツールセットのパスを指定します。If the key has a subkey, MSBuild uses it to specify the path of a sub-toolset that contains additional tools. この場合、ツールセットは両方のキーで定義されたプロパティ定義を組み合わせることによって定義されます。In this case, the Toolset is defined by combining the property definitions that are defined in both keys.

注意

ツールセットのプロパティ名が競合する場合、サブキーのパスに対して定義された値が、ルート キーのパスに対して定義された値よりも優先されます。If toolset property names collide, the value that's defined for the subkey path overrides the value that's defined for the root key path.

サブツールセットは、VisualStudioVersion ビルド プロパティがある場合にアクティブになります。Sub-toolsets become active in the presence of the VisualStudioVersion build property. このプロパティは、次の値のいずれか 1 つを使用できます。This property may take one of these values:

  • "10.0": .NET Framework 4 のサブツールセットを指定します。"10.0" specifies the .NET Framework 4 sub-toolset

  • "11.0": .NET Framework 4.5 のサブツールセットを指定します。"11.0" specifies the .NET Framework 4.5 sub-toolset

  • "12.0": .NET Framework 4.5.1 のサブツールセットを指定します。"12.0" specifies the .NET Framework 4.5.1 sub-toolset

    サブツールセット 10.0 および 11.0 は ToolsVersion 4.0 と一緒に使用する必要があります。Sub-toolsets 10.0 and 11.0 should be used with ToolsVersion 4.0. それ以降のバージョンでは、サブツールセットのバージョンとToolsVersion は一致しています。In later versions, the sub-toolset version and the ToolsVersion should match.

    ビルド中に、MSBuild は VisualStudioVersion プロパティの既定値を自動的に決定し、設定します (このプロパティがまだ定義されていない場合)。During a build, MSBuild automatically determines and sets a default value for the VisualStudioVersion property if it's not already defined.

    MSBuild には、ToolLocationHelper 列挙値をパラメーターとして追加する VisualStudioVersion メソッド用のオーバーロード機能が用意されています。MSBuild provides overloads for the ToolLocationHelper methods that add a VisualStudioVersion enumerated value as a parameter

    サブツールセットは .NET Framework 4.5 で導入されました。Sub-toolsets were introduced in the .NET Framework 4.5.

参照See Also

標準ツールセット構成とカスタム ツールセット構成 Standard and Custom Toolset Configurations
マルチ ターゲットMultitargeting