Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Набор инструментов MSBuild включает файл microsoft.common.tasks, файл microsoft.common.targets и компиляторы, такие как csc.exe и vbc.exe. Большинство наборов инструментов можно использовать для компиляции приложений в несколько версий .NET Framework и более одной системной платформы. Однако набор инструментов MSBuild 2.0 можно использовать только для .NET Framework 2.0.
Атрибут MSBuild в элементе Project в Visual Studio и файлах проектов MSBuild ToolsVersion считается устаревшим в Visual Studio 2019 и более поздних версиях. Его можно безопасно удалить. В этой статье описывается его использование в более ранних версиях MSBuild или для пользовательских наборов инструментов. См. стандартные и настраиваемые конфигурации набора инструментов.
Атрибут ToolsVersion
Укажите набор инструментов в ToolsVersion атрибуте элемента Project в файле проекта. В следующем примере указывается, что проект должен быть создан с помощью набора инструментов MSBuild Current.
<Project ToolsVersion="Current" ... </Project>
Замечание
Некоторые типы проектов используют sdk атрибут вместо ToolsVersion. Дополнительные сведения см. в разделе "Дополнения к формату csproj" для .NET Core.
Как работает атрибут ToolsVersion
При создании проекта в Visual Studio или обновлении существующего проекта атрибут с именем ToolsVersion автоматически включается в файл проекта, а его значение соответствует версии MSBuild, включенной в выпуск Visual Studio. Дополнительные сведения см. в обзоре целевой платформы .
ToolsVersion Если значение определено в файле проекта, MSBuild использует это значение для определения значений свойств набора инструментов, доступных для проекта. Одно свойство Toolset — это $(MSBuildToolsPath)свойство, указывающее путь к средствам .NET Framework. Требуется только это свойство Toolset (или $(MSBuildBinPath)).
Начиная с Visual Studio 2013, версия набора инструментов MSBuild совпадает с номером версии Visual Studio. MSBuild по умолчанию использует этот набор инструментов в Visual Studio и в командной строке независимо от версии набора инструментов, указанной в файле проекта. Это поведение можно переопределить с помощью флага -ToolsVersion. Дополнительные сведения см. в разделе "Переопределение параметров ToolsVersion".
В следующем примере MSBuild находит файл Microsoft.CSharp.targets с помощью зарезервированного MSBuildToolsPath свойства.
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Можно изменить значение MSBuildToolsPath , определив настраиваемый набор инструментов. Дополнительные сведения см. в разделе "Стандартный" и настраиваемых конфигураций набора инструментов.
При сборке решения в командной строке и указании ToolsVersionmsbuild.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 2015 использует ToolsVersion 14.0, а Visual Studio 2017 использует ToolsVersion 15.0. Во многих случаях проект можно открыть в нескольких версиях Visual Studio без изменений. Visual Studio всегда использует правильный набор инструментов, но вы получите уведомление, если используемая версия не соответствует версии в файле проекта. В большинстве случаев это предупреждение является доброкачественным, так как наборы инструментов совместимы в большинстве случаев.
Вложенные наборы инструментов, описанные далее в этом разделе, позволяют MSBuild автоматически переключать набор инструментов для использования в зависимости от контекста, в котором выполняется сборка. Например, MSBuild использует более новый набор инструментов при запуске в Visual Studio 2012, чем при запуске в Visual Studio 2010 без необходимости явного изменения файла проекта.
Реализация набора инструментов
Реализуйте набор инструментов, выбрав пути различных инструментов, целевых объектов и задач, составляющих набор инструментов. Средства в наборе инструментов, который MSBuild определяет из следующих источников:
Папка .NET Framework.
Дополнительные управляемые средства.
Управляемые средства включают ResGen.exe и TlbImp.exe.
MSBuild предоставляет два способа доступа к набору инструментов:
С помощью свойств Toolset
С помощью ToolLocationHelper методов
Свойства набора инструментов указывают пути средств. Начиная с Visual Studio 2017 MSBuild больше не имеет фиксированного расположения. По умолчанию он находится в папке MSBuild\15.0\Bin относительно расположения установки Visual Studio. В более ранних версиях MSBuild использует значение атрибута ToolsVersion в файле проекта для поиска соответствующего раздела реестра, а затем использует сведения в разделе реестра для задания свойств набора инструментов. Например, если ToolsVersion имеет значение 12.0, MSBuild задает свойства набора инструментов в соответствии с этим разделом реестра: HKLM\Software\Microsoft\MSBuild\ToolsVersions\12.0.
Это свойства Toolset:
MSBuildToolsPathуказывает путь двоичных файлов MSBuild.SDK40ToolsPathуказывает путь к дополнительным управляемым средствам для MSBuild 4.x (это может быть 4.0 или 4.5).SDK35ToolsPathуказывает путь к дополнительным управляемым средствам для MSBuild 3.5.
Кроме того, можно программно определить набор инструментов, вызвав методы ToolLocationHelper класса. Класс включает следующие методы:
GetPathToDotNetFramework возвращает путь к папке .NET Framework.
GetPathToDotNetFrameworkFile возвращает путь к файлу в папке .NET Framework.
GetPathToDotNetFrameworkSdk возвращает путь к папке управляемых средств.
GetPathToDotNetFrameworkSdkFile возвращает путь к файлу, который обычно находится в папке управляемых средств.
GetPathToBuildTools возвращает путь к средствам сборки.