次の方法で共有


MSBuild ツールセット (ToolsVersion)

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

Visual Studio および MSBuild プロジェクト ファイルの Project 要素の MSBuild ToolsVersion 属性は、Visual Studio 2019 以降では古いと見なされます。安全に削除できます。 この記事では、以前のバージョンの MSBuild またはカスタム ツールセットでの使用について説明します。 「標準ツールセットとカスタム ツールセットの構成」を参照してください。

ToolsVersion 属性

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

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

一部のプロジェクトの種類では、sdkではなくToolsVersion属性が使用されます。 詳細については、「 .NET Core の csproj 形式への追加」を参照してください。

ToolsVersion 属性のしくみ

Visual Studio でプロジェクトを作成するか、既存のプロジェクトをアップグレードすると、 ToolsVersion という名前の属性がプロジェクト ファイルに自動的に含まれます。その値は、Visual Studio エディションに含まれる MSBuild のバージョンに対応します。 詳細については、「Framework のターゲット設定の概要」を参照してください。

プロジェクト ファイルで ToolsVersion 値が定義されている場合、MSBuild はその値を使用して、プロジェクトで使用できるツールセット プロパティの値を決定します。 1 つのツールセット プロパティは、.NET Framework ツールのパスを指定する $(MSBuildToolsPath)です。 そのツールセット プロパティ (または $(MSBuildBinPath)) のみが必要です。

Visual Studio 2013 以降、MSBuild ツールセットのバージョンは Visual Studio のバージョン番号と同じです。 MSBuild は、プロジェクト ファイルで指定されたツールセットのバージョンに関係なく、Visual Studio 内およびコマンド ラインで既定でこのツールセットに設定されます。 この動作は、-ToolsVersion フラグを使用してオーバーライドできます。 詳細については、「 ToolsVersion の設定をオーバーライドする」を参照してください。

次の例では、MSBuild は、予約プロパティを使用して MSBuildToolsPath ファイルを検索します。

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

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

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

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

Visual Studio 2010 と Visual Studio 2012 では、ToolsVersion 4.0 が使用されます。 Visual Studio 2013 では、ToolsVersion 12.0 が使用されます。 Visual Studio 2015 では ToolsVersion 14.0 が使用され、Visual Studio 2017 では ToolsVersion 15.0 が使用されます。 多くの場合、Visual Studio の複数のバージョンでプロジェクトを変更せずに開くことができます。 Visual Studio では常に正しいツールセットが使用されますが、使用されているバージョンがプロジェクト ファイル内のバージョンと一致しない場合は通知されます。 ほとんどの場合、ツールセットは互換性を持つので、ほとんどの場合、この警告は無害です。

このトピックで後述するサブツールセットを使用すると、MSBuild は、ビルドを実行しているコンテキストに基づいて、使用するツールのセットを自動的に切り替えることができます。 たとえば、MSBuild では、Visual Studio 2010 で実行する場合よりも Visual Studio 2012 で実行する場合よりも新しいツール セットが使用されます。プロジェクト ファイルを明示的に変更する必要はありません。

ツールセットの実装

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

  • .NET Framework フォルダー。

  • その他の管理ツール。

    マネージド ツールには 、ResGen.exe とTlbImp.exeが含 まれます

MSBuild には、ツールセットにアクセスする 2 つの方法があります。

  • ツールセットのプロパティを使用する

  • ToolLocationHelper メソッドを使用する

ツールセットのプロパティは、ツールのパスを指定します。 Visual Studio 2017 以降では、MSBuild の場所が固定されなくなりました。 既定では、Visual Studio のインストール場所を基準とした MSBuild\15.0\Bin フォルダーにあります。 以前のバージョンでは、MSBuild はプロジェクト ファイル内の ToolsVersion 属性の値を使用して対応するレジストリ キーを検索し、レジストリ キーの情報を使用してツールセットのプロパティを設定します。 たとえば、 ToolsVersion12.0値がある場合、MSBuild は、 HKLM\Software\Microsoft\MSBuild\ToolsVersions\12.0 というレジストリ キーに従ってツールセットのプロパティを設定します。

ツールセットのプロパティは次のとおりです。

  • MSBuildToolsPath は、MSBuild バイナリのパスを指定します。

  • SDK40ToolsPath は、MSBuild 4.x (4.0 または 4.5) 用の追加のマネージド ツールのパスを指定します。

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

または、 ToolLocationHelper クラスのメソッドを呼び出すことによって、ツールセットをプログラムで決定することもできます。 このクラスには、次のメソッドが含まれています。