标准和自定义工具集配置

MSBuild 3.5 包括两个预定义的工具集。 工具集是可用于生成项目的任务、目标和命令行工具集合。 您也可以创建自己的自定义工具集。

提示

在继续下面的内容前,我们建议您先阅读一下使用 MSBuild 将 .NET Framework 的特定版本确定为目标,以更好地了解工具集、目标 Framework 和 ToolsVersions。

工具集类型

在定义自定义工具集时,也会定义 $(MSBuildToolsPath) 所指向的目录的值。 因此,您可以使用项目文件中的 $(MSBuildToolsPath) 来导入任务和目标,而不是在项目文件中对任务和目标值进行硬编码。 这使您可以在注册表或配置文件中定义全局工具集,以便可以在开发人员桌面上或在编译实验室中进行编译。

通过使用工具集,可将 MSBuild 定向到目标特定的 .NET Framework 版本。这意味着您可以生成仅在 Visual Studio 2008 中工作的项目,也可以在 Visual Studio 2008 中生成 Visual Studio 2005 项目。

Visual Studio 2008 包括两个“标准”工具集。 一个工具集(同时也包含在 Visual Studio 2005 的 MSBuild 2.0 中)适用于 .NET Framework 2.0。另一个工具集(包含在 MSBuild 3.5 中)适用于 .NET Framework 2.0、.NET Framework 3.0 和 .NET Framework 3.5。

标准工具集配置

MSBuild 3.5 包括下列标准工具集:

ToolsVersion

MSBuildToolsPath 或 MSBuildBinPath

2.0

<Windows 安装路径>\Microsoft.Net\Framework\v2.0.50727\

3.5

<Windows 安装路径>\Microsoft.NET\Framework\v3.5.20223\

在运行 MSBuild.exe 或创建 MSBuild 引擎的实例时,可在计算机中的任意位置使用标准工具集,除非在 MSBuild.exe.config 文件或宿主特定的配置文件中重写工具集中的信息。

在项目文件的 Project 标记中作为一个特性指定的 ToolsVersion 值确定 Visual Studio 生成的项目应使用哪个工具集。 可将 ToolsVersion 视为工具集的“名称”。如果未在项目中指定 ToolsVersion,则将使用默认的 ToolsVersion。 对于 MSBuild 3.5,默认的 ToolsVersion 值设置为 2.0。这意味着,在未显式指定 ToolsVersion 的情况下生成的项目将使用 Visual Studio 2005 附带的 2.0 工具集。 Visual Studio 2010 项目自动将 ToolsVersion 值设为 3.5 并据此生成所有项目。 因为使用了这一新的工具集,它可以将所有三个版本的 .NET Framework 作为目标版本。

标准工具集信息在下列注册表项中定义:

注册表配置单元

字符串键名

字符串键值

\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\3.5\

DefaultToolsVersion

2.0

\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\2.0\

ToolsPath

.NET Framework 2.0 安装路径

\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\3.5\

ToolsPath

.NET Framework 3.5 安装路径

DefaultToolsVersion 指定在未指定工具集的条件下生成项目时应使用哪个工具集。 例如,Visual Studio 2010 中 MSBuild 的 DefaultToolsVersion 值为 2.0。 可在宿主特定的配置文件中重写 DefaultToolsVersion 值。 其他值定义 .NET Framework 版本的安装路径。

提示

除非有必要,否则我们建议您不要更改这些设置。 不过,您还是可以添加自己的设置,定义计算机范围内的自定义工具集定义,这将在下一节中进行介绍。

自定义工具集定义

当标准的工具集不能满足您的生成要求时,您可以创建自定义工具集。 例如,您可能有一个生成实验室方案,必须使用一个单独的生成系统来生成 Visual C++ 项目。通过使用自定义工具集,您可以在创建项目或运行 MSBuild.exe 时,为 ToolsVersion 特性指定一个自定义值。通过此方法,您还可以使用 $(MSBuildToolsPath) 属性从该目录中导入 .targets 文件。

在 MSBuild.exe 的配置文件中指定自定义工具集,或者,如果您有一个承载 MSBuild 引擎的单独工具,则在 MSBuild 自定义宿主的配置文件中指定自定义工具集。 例如,MSBuild.exe 的配置文件可以包含以下工具集定义:

<msbuildToolsets default="3.0">
   <toolset toolsVersion="4.0">
      <property name="MSBuildToolsPath" 
        value="C:\Windows\Microsoft .NET\Framework\v3.0" />
   </toolset>
</msbuildToolsets>

<msbuildToolsets> 是一个自定义 .NET 配置节,它必须同时在配置文件中进行如下定义:

<configSections>
   <section name="msbuildToolsets"       
       Type="Microsoft.Build.BuildEngine.ToolsetConfigurationSection, 
       Microsoft.Build.Engine, Version=3.5.0.0, Culture=neutral, 
       PublicKeyToken=b03f5f7f11d50a3a"
   </section>
</configSections>

提示

为了能正确读取,configSections 标记必须是配置标记下的第一个标记。

ToolsetConfigurationSection 是一个可由自定义配置的任意宿主使用的自定义配置节。 如果使用自定义工具集,则宿主除了提供配置文件项外,无需再执行任何其他操作便可初始化生成引擎。 通过在注册表中定义这些项,您可以指定计算机范围内的、适用于 MSBuild.exe、Visual Studio 及所有 MSBuild 宿主的工具集。

提示

如果先在注册表中定义了 ToolsVersion 的设置,而后又在配置文件中对其进行了定义,则这两个定义并不会合并。 配置文件中的定义会具有较高的优先级,而注册表中的 ToolsVersion 设置则会被忽略。

下列属性特定于项目中所用的 ToolsVersion 值:

  • $(MSBuildBinPath) - MSBuildBinPath 被设置为 ToolsPath 值,该值在定义 ToolsVersion 的注册表或配置文件中指定。 注册表或配置文件中的 $(MSBuildToolsPath) 设置用于指定工具集的位置。 在项目文件中,此值映射到 $(MSBuildBinPath) 属性和 $(MSBuildToolsPath) 属性。

  • $(MSBuildToolsPath) - 这个保留属性由在配置文件中指定的 MSBuildToolsPath 属性提供。 (此属性取代了 $(MSBuildBinPath)。 但是,$(MSBuildBinPath) 是为实现向前兼容性而承载的。)

还可以使用添加 MSBuildToolsPath 属性时所用的语法在配置文件中添加特定于 ToolsVersion 的自定义属性。 只需使用与配置文件中所指定的值相同的名称,即可在项目文件中使用这些自定义属性。

请参见

概念

MSBuild 高级概念