ToolsVersion 設定のオーバーライドOverriding ToolsVersion Settings

プロジェクトおよびソリューションのツールセットは、次の 3 つの方法のいずれかで変更できます。You can change the Toolset for projects and solutions in one of three ways:

  1. コマンド ラインからプロジェクトまたはソリューションをビルドする場合は、/ToolsVersion スイッチ (省略形は /tv) を使用します。by using the /ToolsVersion switch (or /tv, for short) when you build the project or solution from the command line

  2. MSBuild タスクに ToolsVersion パラメーターを設定します。by setting the ToolsVersion parameter on the MSBuild task

  3. ソリューション内のプロジェクトに $(ProjectToolsVersion) プロパティを設定します。by setting the $(ProjectToolsVersion) property on a project within a solution. これにより、他のプロジェクトとは異なるツールセットのバージョンを使用して、ソリューション内にプロジェクトをビルドできます。This lets you build a project in a solution with a Toolset version that differs from that of the other projects.

コマンド ラインでのビルドでプロジェクトおよびソリューションの ToolsVersion 設定をオーバーライドするOverride the ToolsVersion Settings of Projects and Solutions on Command Line Builds

Visual Studio プロジェクトは通常、プロジェクト ファイルに指定された ToolsVersion でビルドされますが、コマンド ラインで /ToolsVersion (または /tv) スイッチを指定することによって、プロジェクト ファイルの ToolsVersion 値をオーバーライドし、すべてのプロジェクトとそのプロジェクト間依存関係を別のツールセットでビルドできます。Although Visual Studio projects typically build with the ToolsVersion specified in the project file, you can use the /ToolsVersion (or /tv) switch on the command line to override that value and build all of the projects and their project-to-project dependencies with a different Toolset. 例:For example:

msbuild.exe someproj.proj /tv:12.0 /p:Configuration=Debug  

この例では、すべてのプロジェクトが ToolsVersion 12.0 でビルドされます In this example, all projects are built using ToolsVersion 12.0. (後の「優先順位」を参照してください)。(However, see the section "Order of Precedence" later in this topic.)

コマンド ラインで /tv スイッチを使用するときには、特定のプロジェクトに $(ProjectToolsVersion) プロパティを指定し、ソリューション内の他のプロジェクトとは異なる ToolsVersion 値でビルドすることもできます。When using the /tv switch on the command line, you can optionally use the $(ProjectToolsVersion) property in individual projects to build them with a different ToolsVersion value than the other projects in the solution.

MSBuild タスクの ToolsVersion パラメーターを使用して ToolsVersion 設定をオーバーライドするOverride the ToolsVersion Settings Using the ToolsVersion Parameter of the MSBuild Task

MSBuild タスクは、あるプロジェクトで別のプロジェクトをビルドするための主要な手段です。The MSBuild task is the primary means for one project to build another. MSBuild タスクには、プロジェクトに指定された値とは異なる ToolsVersion でプロジェクトをビルドすることが可能となる省略可能なタスク パラメーター ToolsVersion が用意されています。To enable the MSBuild task to build a project with a different ToolsVersion than the one specified in the project, it provides an optional task parameter named ToolsVersion. このパラメーターを使用する方法を次の例に示します。The following example demonstrates how to use this parameter:

  1. 次のコードを含む projectA.proj という名前のファイルを作成します。Create a file that's named projectA.proj and that contains the following code:

    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"  
    ToolsVersion="12.0">  
    
        <Target Name="go" >   
            <Message Text="projectA.proj" />  
            <Message Text="MSBuildToolsVersion: $(MSBuildToolsVersion)" />  
            <Message Text="MSBuildToolsPath:    $(MSBuildToolsPath)" />  
    
            <MSBuild Projects="projectB.proj"  
                ToolsVersion="2.0"  
                Targets="go" />  
        </Target>  
    </Project>  
    
  2. 次のコードを含む projectB.proj という名前の別のファイルを作成します。Create another file that's named projectB.proj and that contains the following code:

    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"  
    ToolsVersion="12.0">  
    
        <Target Name="go">  
            <Message Text="projectB.proj" />  
            <Message Text="MSBuildToolsVersion: $(MSBuildToolsVersion)" />  
            <Message Text="MSBuildToolsPath:    $(MSBuildToolsPath)" />  
        </Target>  
    </Project>  
    
  3. コマンド プロンプトに次のコマンドを入力します。Enter the following command at a command prompt:

    msbuild projectA.proj /t:go /toolsversion:3.5  
    
  4. 次のような出力が表示されます。The following output appears. projectA では、コマンド ラインに設定された /toolsversion:3.5 が、ToolsVersion=12.0 タグに設定された Project をオーバーライドします。For projectA, the /toolsversion:3.5 setting on the command line overrides the ToolsVersion=12.0 setting in the Project tag.

    ProjectBprojectA 内のタスクによって呼び出されます。ProjectB is called by a task in projectA. そのタスクには ToolsVersion=2.0 が設定されており、この設定は、ToolsVersion の他の projectB 設定をオーバーライドします。That task has ToolsVersion=2.0, which overrides the other ToolsVersion settings for projectB.

    Output:  
      projectA.proj  
      MSBuildToolsVersion: 3.5  
      MSBuildToolsPath:    C:\Windows\Microsoft.NET\Framework\v3.5  
    
      projectB.proj  
      MSBuildToolsVersion: 2.0  
      MSBuildToolsPath:    C:\Windows\Microsoft.NET\Framework\v2.0.50727  
    

優先順位Order of Precedence

ToolsVersion は、次の優先順位に基づいて決定されます (順位の高いものから先に挙げています)。The order of precedence, from highest to lowest, used to determine the ToolsVersion is:

  1. プロジェクトのビルドに使用される MSBuild タスクの ToolsVersion 属性。The ToolsVersion attribute on the MSBuild task used to build the project, if any.

  2. msbuild.exe のコマンドで使用される /toolsversion (または /tv) スイッチ。The /toolsversion (or /tv) switch that's used in the msbuild.exe command, if any.

  3. 環境変数 MSBUILDTREATALLTOOLSVERSIONSASCURRENT が設定されている場合は、現在の ToolsVersion を使用します。If the environment variable MSBUILDTREATALLTOOLSVERSIONSASCURRENT is set, then use the current ToolsVersion.

  4. 環境変数 MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT が設定され、プロジェクト ファイルで定義されている ToolsVersion が現在の ToolsVersion よりも大きい場合は、現在の ToolsVersion を使用します。If the environment variable MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT is set and the ToolsVersion defined in the project file is greater than the current ToolsVersion, use the current ToolsVersion.

  5. 環境変数 MSBUILDLEGACYDEFAULTTOOLSVERSION が設定されているか、または ToolsVersion が設定されていない場合は、次の手順が使用されます。If the environment variable MSBUILDLEGACYDEFAULTTOOLSVERSION is set, or if ToolsVersion is not set, then the following steps are used:

    1. プロジェクト ファイルにある Project 要素の ToolsVersion 属性。The ToolsVersion attribute of the Project element of the project file. この属性が存在しない場合は、現在のバージョンであると見なされます。If this attribute doesn't exist, it is assumed to be the current version.

    2. MSBuild.exe.config ファイルに定義された既定のツール バージョン。The default tools version in the MSBuild.exe.config file.

    3. レジストリに定義された既定のツール バージョン。The default tools version in the registry. 詳細については、「標準ツールセット構成とカスタム ツールセット構成」を参照してください。For more information, see Standard and Custom Toolset Configurations.

  6. 環境変数 MSBUILDLEGACYDEFAULTTOOLSVERSION が設定されていない場合は、次の手順が使用されます。If the environment variable MSBUILDLEGACYDEFAULTTOOLSVERSION is not set, then the following steps are used:

    1. 環境変数 MSBUILDDEFAULTTOOLSVERSION が存在する ToolsVersion に設定されている場合は、それを使用します。If the environment variable MSBUILDDEFAULTTOOLSVERSION is set to a ToolsVersion that exists, use it.

    2. DefaultOverrideToolsVersion が MSBuild.exe.config で設定されている場合は、それを使用します。If DefaultOverrideToolsVersion is set in MSBuild.exe.config, use it.

    3. DefaultOverrideToolsVersion がレジストリで設定されている場合は、それを使用します。If DefaultOverrideToolsVersion is set in the registry, use it.

    4. それ以外の場合は、現在の ToolsVersion を使用します。Otherwise, use the current ToolsVersion.

関連項目See Also

マルチターゲット Multitargeting
MSBuild の概念 MSBuild Concepts
ツール セット (ToolsVersion) Toolset (ToolsVersion)
標準ツールセット構成とカスタム ツールセット構成Standard and Custom Toolset Configurations