MSBuild 工具集 (ToolsVersion)
MSBuild 使用任务、目标和工具工具集生成应用程序。 通常,MSBuild 工具集包括一 microsoft.common.tasks 文件、一 microsoft.common.targets 文件和编译器 csc.exe 和 vbc.exe 等。 大多数工具集可用于将应用程序编译成多 .NET Framework 的版本和多个系统平台。 但是,MSBuild 2.0 工具集仅可用于面向 .NET Framework 2.0。
ToolsVersion 特性
指定工具集在 ToolsVersion 属性在项目文件中 项目 元素。 下面的示例通过使用 MSBuild 2.0 工具集,应生成项目。
<Project ToolsVersion="2.0" ... </Project>
ToolsVersion 特性的工作原理
当您在 Visual Studio 中创建一个项目或升级现有项目时,名为 ToolsVersion 的属性在项目文件中自动包含,并且其值对应于 Visual Studio 编辑器包含 .NET Framework 的版本。 有关更多信息,请参见面向特定的 .NET Framework 版本或配置文件。
当 ToolsVersion 值在项目文件中定义,值确定工具集属性的值设置为项目的 MSBuild 使用。 一个工具集属性是 $(MSBuildToolsPath),指定 .NET Framework 工具的路径。 需要该工具集特性 (或 $(MSBuildBinPath))。
使用该 MSBuildToolsPath 保留属性,如下面的示例中,MSBuild 查找 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 中,它不识别已升级的 ToolsVersion 并且不生成项目,就象属性仍设置为 3.5。
Visual Studio 2010 和 Visual Studio 2012 使用 ToolsVersion 4.0。 在大多数情况下,可以在 Visual Studio 的两个版本的项目中,不进行修改。
子工具集,本主题后面所述,允许 MSBuild 将设置工具根据上下文中使用运行生成的自动切换。 例如,MSBuild 使用较新设置工具,当在 Visual Studio 2012 中运行相比,当在 Visual Studio 2010 时运行,因此,无需您可以更改项目文件。 有关更多信息,请参见如何:修改项目系统,以便项目在 Visual Studio 的多个版本加载。
工具集实现
通过选择组成工具集各种工具、目标和任务的路径实现一个工具集。 在 MSBuild 定义的工具集的工具来自以下源:
.NET Framework 文件夹。
其他管理的工具。
管理工具包括 ResGen.exe 与 TlbImp.exe。
MSBuild 提供两种方式访问工具集:
通过使用工具集特性
使用 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 生成属性时。 此属性可以采用这些值之一:
“10.0”指定 .NET Framework 4 子工具集
“11.0”指定 .NET Framework 4.5 子工具集
在生成期间,则为;如果尚未定义,MSBuild 自动确定并将 VisualStudioVersion 某个属性的默认值。
MSBuild 为添加一个 VisualStudioVersion 枚举值作为参数的 ToolLocationHelper 方法提供重载。 此外,MSBuild 提供这些新方法返回一个附加的本机工具路径:
GetPathToWindowsSdk
GetPathToWindowsSdkFile
这些新方法也采用 VisualStudioVersion 枚举值作为参数确定使用哪个子工具集。 VisualStudioVersion 枚举可以具有下列值之一:
VisualStudio10
VisualStudio11
VisualStudioLatest
子工具集在 .NET Framework 4.5 引入。