Создание настраиваемой конфигурации набора инструментов

Набор инструментов MSBuild содержит ссылки на задачи, целевые объекты и средства, которые можно использовать для создания проекта приложения. MSBuild включает стандартный набор инструментов, но также можно создавать пользовательские наборы инструментов.

Стандартные конфигурации набора инструментов

MSBuild содержит стандартный набор Current инструментов, ссылающийся на текущую версию MSBuild, которая устанавливается в папку MSBuild\Current\Bin в каталоге установки Visual Studio.

Определения пользовательских наборов инструментов

Если стандартный набор инструментов не удовлетворяет требованиям сборки, можно создать пользовательский Toolset. Например, возможен сценарий сборки в лабораторной среде, в которой для сборки проектов C++ должна быть отдельная система. С помощью пользовательского Toolset при запуске файла MSBuild.exe можно присваивать атрибуту ToolsVersion пользовательские значения при использовании параметра командной строки /toolsVersion. Если указать атрибут ToolsVersion в файле проекта, он будет пропущен.

Это позволяет также использовать свойство $(MSBuildToolsPath) для импорта файлов TARGETS из указанного каталога и определять пользовательские свойства набора инструментов для любых проектов, в которых используется этот набор.

Укажите пользовательский набор инструментов в файле конфигурации для MSBuild.exe (или для пользовательского средства, в котором размещается обработчик MSBuild). Например, файл конфигурации для MSBuild.exe может включать в себя указанное ниже определение Toolset, если требуется определить набор инструментов MyCustomToolset.

<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), но не оба эти свойства, если только их значения не совпадают.

    Вы можете также добавить в файл конфигурации пользовательские и зависящие от ToolsVersion свойства, используя тот же самый синтаксис, который применяется для добавления свойства MSBuildToolsPath. Такие пользовательские свойства будут доступны для файла проекта, если используется имя, совпадающее со значением, указанным в файле конфигурации. В файле конфигурации можно определять наборы инструментов, но не вложенные наборы инструментов.