重写 ToolsVersion 设置

使用 /ToolsVersion 开关 (或 /tv,您可以为项目文件选择工具集,缩写形式) 或通过设置 $(ProjectToolsVersion) 属性。 这在使用与其他项目不同的工具集版本的解决方法使您可以生成项目。 还可以重写一 MSBuild 任务使用的工具版本通过设置 ToolsVersion 任务参数。

在命令行生成中重写项目的 ToolsVersion 设置

虽然典型 Visual Studio 在项目文件中 ToolsVersion 的项目生成指定的,您可以使用 /ToolsVersion(或,/tv) 挂接到命令行重写该值并生成所有项目及其项目到项目依赖项与不同的工具集。 例如:

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

在此示例中,所有项目均使用 ToolsVersion 3.5 生成。 (但请参见本主题后面的“优先级顺序”一节。)

在命令行中使用 /tv 开关时,可以选择在个别项目中使用 $(ProjectToolsVersion) 属性,以使用与解决方案中的其他项目不同的 ToolsVersion 值来生成这些项目。

使用 MSBuild 任务的 ToolsVersion 参数重写 ToolsVersion 设置

MSBuild 任务是一个项目生成另一个项目的主要方式。 为了使 MSBuild 任务能够使用与项目中指定的值不同的 ToolsVersion 来生成项目,它提供了名为 ToolsVersion 的可选任务参数。 下面的示例演示如何使用此参数:

  1. 创建名为 projectA.proj,并包含以下代码的文件:

    <Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003"
    ToolsVersion="4.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,并包含以下代码的另一个文件:

    <Project xmlns="https://schemas.microsoft.com/developer/msbuild/2003"
    ToolsVersion="4.0">
    
        <Target Name="go">
            <Message Text="projectB.proj" />
            <Message Text="MSBuildToolsVersion: $(MSBuildToolsVersion)" />
            <Message Text="MSBuildToolsPath:    $(MSBuildToolsPath)" />
        </Target>
    </Project>
    
  3. 输入以下命令在命令提示符处:

    msbuild projectA.proj /t:go /toolsversion:3.5
    
  4. 下面的输出显示。 为 projectA,在命令行上设置 /toolsversion:3.5 重写设置。Project 标记的 ToolsVersion=4.0。

    ProjectB 由 projectA的任务调用。 该任务具有 ToolsVersion=2.0,重写 projectB的其他 ToolsVersion 设置。

    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
    

优先级顺序

优先级,由高至低,用于确定项目使用的 ToolsVersion 编译为:

  1. 在所使用的 MSBuild 任务的 ToolsVersion 属性生成项目,因此,如果有的话)。

  2. 用于 msbuild.exe 命令的 /toolsversion (或 /tv) 开关,因此,如果有的话)。

  3. 项目文件的 项目 元素的 ToolsVersion 属性。

  4. 该默认值工具在 MSBuild.exe.config 文件的版本。

  5. 注册表中的默认工具版本。 有关更多信息,请参见标准和自定义工具集配置

数字 1、2 和 3 与下列属性相同:

  • MSBuild 任务的 Properties 特性

  • msbuild.exe 中的 /p: 开关

  • 项目文件中的属性标记

请参见

概念

MSBuild 工具集 (ToolsVersion)

标准和自定义工具集配置

其他资源

MSBuild 多定向概述

MSBuild 概念