Поделиться через


Набор инструментов 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 12.0.

<Project ToolsVersion="12.0" ... </Project>

Как работает атрибут ToolsVersion

При создании проекта в Visual Studio или обновлении существующего проекта атрибут с именем ToolsVersion автоматически включается в файл проекта, а его значение соответствует версии MSBuild, включенной в выпуск Visual Studio. Для получения дополнительной информации см. Указание конкретной версии или профиля платформы .NET Framework.

Если значение ToolsVersion определено в файле проекта, MSBuild использует это значение для определения значений свойств набора инструментов, доступных для проекта. Одно из свойств набора инструментов — это $(MSBuildToolsPath). Оно определяет путь к инструментам .NET Framework. Обязательным является только это свойство набора инструментов (или $(MSBuildBinPath)).

Начиная с Visual Studio 2013, версия набора инструментов MSBuild совпадает с номером версии Visual Studio. MSBuild по умолчанию соответствует этому набору инструментов в Visual Studio и в командной строке, независимо от версии набора инструментов, указанной в файле проекта. Это поведение можно изменить с помощью флага /ToolsVersion. Дополнительные сведения см. в разделе Переопределение настроек атрибута ToolsVersion.

В следующем примере MSBuild находит файл Microsoft.CSharp.targets с помощью зарезервированного свойства MSBuildToolsPath.

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

Значение MSBuildToolsPath можно изменить, определив пользовательский набор инструментов. Дополнительные сведения см. в разделе Стандартные и настраиваемые конфигурации наборов инструментов.

Если вы строите решение из командной строки и указываете значение атрибута ToolsVersion для msbuild.exe, все проекты и зависимости между проектами строятся в соответствии с этим значением ToolsVersion, даже если в каждом проекте в решении указано собственное значение ToolsVersion. Определение значения ToolsVersion для каждого отдельного проекта рассматривается в разделе Переопределение параметров ToolsVersion.

Атрибут ToolsVersion также используется для миграции проектов. Например, если открыть проект Visual Studio 2008 в Visual Studio 2010, то файл проекта обновится и получит значение ToolsVersion = "4.0". Если после этого вы попытаетесь открыть этот проект в Visual Studio 2008, он не распознает обновленное значение атрибута ToolsVersion и построит проект таким образом, как если бы этот атрибут по-прежнему имел значение 3.5.

В Visual Studio 2010 и Visual Studio 2012 используется ToolsVersion 4.0. В Visual Studio 2013 используется ToolsVersion 12.0. Во многих случаях проект можно открыть во всех трех версиях Visual Studio без внесения изменений. В Visual Studio всегда используется правильный набор инструментов, но если версия не совпадает с версией в файле проекта, вы получите уведомление. Почти всегда это предупреждение носит информационный характер, так как наборы инструментов в большинстве случаев совместимы.

Поднаборы инструментов, описываемые ниже в этом разделе, позволяют MSBuild автоматически переключаться на набор инструментов в зависимости от контекста, в котором запущено построение. Например, при запуске в Visual Studio 2012 MSBuild использует более новый набор инструментов, чем при запуске в Visual Studio 2010, но при этом не требует изменений в файле проекта. Для получения дополнительной информации см. Практическое руководство. Изменение система проекта так как активируется в нескольких версий Visual Studio.

Реализация набора инструментов

Реализация набора инструментов осуществляется с помощью выбора путей к различным инструментам, целям и задачам, из которых состоит набор инструментов. Инструменты в наборе, которые определяет MSBuild, поступают из следующих источников:

  • из папки .NET Framework;

  • из дополнительных управляемых инструментов.

В число управляемых инструментов входят ResGen.exe и TlbImp.exe.

MSBuild предлагает два способа доступа к набору инструментов:

  • с помощью свойств набора инструментов;

  • с помощью методов ToolLocationHelper.

Свойства набора инструментов указывают на пути к инструментам. В соответствии со значением атрибута ToolsVersion в файле проекта MSBuild определяет местоположение соответствующего раздела реестра, а затем использует сведения из раздела реестра для настройки свойств набора инструментов. Например, если атрибут ToolsVersion имеет значение 12.0, то MSBuild задает свойства набора инструментов в соответствии со следующим разделом реестра: HKLM\Software\Microsoft\MSBuild\ToolsVersions\12.0.

Свойства набора инструментов:

  • MSBuildToolsPath указывает путь к двоичным файлам MSBuild;

  • SDK40ToolsPath указывает путь к дополнительным управляемым инструментам для MSBuild 4.x (4.0 или 4.5);

  • SDK35ToolsPath указывает путь к дополнительным управляемым инструментам для MSBuild 3.5.

Вы также можете программно определить набор инструментов, вызвав методы класса ToolLocationHelper. Класс включает следующие методы:

Поднаборы инструментов

Как говорилось выше в этом разделе, для указания пути к основным инструментам в MSBuild используется раздел реестра. Если в разделе имеется подраздел, то он используется в MSBuild для указания пути к поднабору инструментов, в котором содержатся дополнительные инструменты. В этом случае набор инструментов определяется комбинацией определений свойств, которые настраиваются в двух разделах.

Примечание

Если имена свойств набора инструментов конфликтуют, то значение, определенное для пути подраздела, заменяет значение, установленное для пути корневого раздела.

Поднаборы инструментов становятся активными в настоящем свойства построения VisualStudioVersion. Это свойство может принимать одно из следующих значений:

  • "10.0" указывает на поднабор инструментов .NET Framework 4;

  • "11.0" указывает на поднабор инструментов .NET Framework 4.5;

  • "12.0" указывает на поднабор инструментов .NET Framework 4.5.1.

Поднаборы инструментов 10.0 и 11.0 должны использоваться с ToolsVersion 4.0. В более поздних версиях версии поднабора инструментов и ToolsVersion должны совпадать.

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

MSBuild обеспечивает перезагрузку для методов ToolLocationHelper, которые добавляют значение перечисления VisualStudioVersion в виде параметра.

Поднаборы инструментов впервые появились на платформе .NET Framework 4.5.

См. также

Основные понятия

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

Другие ресурсы

MSBuild: обзор настройки для различных версий