创建自定义工具集配置

MSBuild 工具集包含对可用来生成应用程序项目的任务、目标和工具的引用。 MSBuild 包括标准工具集,但也可以创建自定义工具集。

标准工具集配置

MSBuild 包含引用 MSBuild 当前版本的标准工具集 Current,该版本安装在 Visual Studio 安装目录下的文件夹 MSBuild\Current\Bin 中。

自定义工具集定义

当标准工具集不满足生成要求时,可以创建自定义 Toolset。 例如,你可能有一套生成实验室方案,方案中必须有一个单独的系统用于生成 C++ 项目。 通过使用自定义 Toolset,可以在使用 /toolsVersion 命令行开关运行 MSBuild.exe 时为 ToolsVersion 属性分配自定义值。 如果在项目文件中指定了 ToolsVersion 属性,则将忽略。

这样,也可以使用 $(MSBuildToolsPath) 属性从该目录导入 .targets 文件,以及定义自己的自定义工具集属性,该属性可用于任何使用该工具集的项目。

在 MSBuild.exe 或托管 MSBuild 引擎的自定义工具(如果正在使用的话)的配置文件中指定自定义工具集。 例如,如果想要定义名为 MyCustomToolset 的工具集,MSBuild.exe 的配置文件可以包含以下 Toolset 定义 。

<msbuildToolsets default="MyCustomToolset">
   <toolset toolsVersion="MyCustomToolset">
      <property name="MSBuildToolsPath"
        value="C:\SpecialPath" />
   </toolset>
</msbuildToolsets>

还必须在配置文件中定义 <msbuildToolsets>,如下所示。

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

注意

若要正确读取,<configSections> 必须是 <configuration> 部分中的第一个子节。

ToolsetConfigurationSection 是一个可供任意 MSBuild 主机用于自定义配置的自定义配置部分。 如果使用自定义工具集,则主机除了提供配置文件项外,无需再执行任何其他操作便可初始化生成引擎。

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

  • $(MSBuildBinPath) 设置为 ToolsPath 值,该值在定义 ToolsVersion 的注册表或配置文件中指定。 注册表或配置文件中的 $(MSBuildToolsPath) 设置指定核心任务和目标的位置。 在项目文件中,此值映射到 $(MSBuildBinPath) 属性和 $(MSBuildToolsPath) 属性。

  • $(MSBuildToolsPath) 是一个由在配置文件中指定的 MSBuildToolsPath 属性提供的保留属性。 (此属性取代 $(MSBuildBinPath)。但是,$(MSBuildBinPath) 的目的是实现兼容性。)自定义工具集必须定义 $(MSBuildToolsPath)$(MSBuildBinPath),但不能同时定义二者,除非它们具有相同的值。

    还可以使用添加 MSBuildToolsPath 属性时所用的语法向配置文件添加特定于 ToolsVersion 的自定义属性。 如果要使这些自定义属性可在项目文件中使用,请使用与配置文件中指定的值相同的名称。 可以在配置文件中定义工具集但不能定义子工具集。