Переопределение параметров ToolsVersion
Атрибут ToolsVersion
элемента Project в Файлах проекта Visual Studio и MSBuild считается устаревшим в Visual Studio 2019 и более поздних версиях. Его можно безопасно удалить. В этой статье описывается его использование в более ранних версиях MSBuild или для пользовательских наборов инструментов. См . стандартные и настраиваемые конфигурации набора инструментов.
Набор инструментов для проектов и решений можно изменить одним из трех способов:
Используя параметр
-ToolsVersion
(или сокращенно-tv
) при сборке проекта или решения из командной строки.Задав параметр
ToolsVersion
для задачи MSBuild.Задав свойство
$(ProjectToolsVersion)
для проекта в решении. Это позволяет собирать проект в решении с версией набора инструментов, отличающейся от используемой в других проектах.
Переопределение параметров ToolsVersion для проектов и решений, собираемых из командной строки
Хотя в проектах Visual Studio параметр ToolsVersion при сборке обычно задается в файле проекта, можно с помощью параметра командной строки -ToolsVersion
(или -tv
) переопределить это значение и построить все проекты и зависимости между ними с использованием другого набора инструментов. Например:
msbuild.exe someproj.proj -tv:12.0 -p:Configuration=Debug
В этом примере построение всех проектов выполняется с использованием значения ToolsVersion 12.0. (Ознакомьтесь также с разделом Порядок приоритетов далее в этой статье.)
Если в командной строке используется параметр -tv
, можно в отдельных проектах использовать дополнительно свойство $(ProjectToolsVersion)
, чтобы создать их с другим значением ToolsVersion по сравнению с остальными проектами в решении.
Переопределение параметров ToolsVersion с помощью параметра ToolsVersion в задаче MSBuild
Задача MSBuild — основное средство для создания одного проекта из другого. Чтобы в задаче MSBuild можно было создать проект со значением ToolsVersion, отличающимся от значения, заданного в проекте, предоставляется дополнительный параметр задачи с именем ToolsVersion
. В следующем примере демонстрируется применение этого параметра.
Создайте файл с именем projectA.proj и добавьте в него следующий код:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0"> <Target Name="go" > <Message Text="projectA.proj" /> <Message Text="MSBuildToolsVersion: $(MSBuildToolsVersion)" /> <Message Text="MSBuildToolsPath: $(MSBuildToolsPath)" /> <MSBuild Projects="projectB.proj" ToolsVersion="2.0" Targets="go" /> </Target> </Project>
Создайте файл с именем projectB.proj и добавьте в него следующий код:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0"> <Target Name="go"> <Message Text="projectB.proj" /> <Message Text="MSBuildToolsVersion: $(MSBuildToolsVersion)" /> <Message Text="MSBuildToolsPath: $(MSBuildToolsPath)" /> </Target> </Project>
В командной строке введите следующую команду.
msbuild projectA.proj -t:go -toolsversion:3.5
Появится следующий результат. Для
projectA
параметр-toolsversion:3.5
в командной строке переопределяет параметрToolsVersion=12.0
в тегеProject
.Метод
ProjectB
вызывается задачей вprojectA
. Эта задача имеет параметрToolsVersion=2.0
, который переопределяет другие параметрыToolsVersion
дляprojectB
.Output: projectA.proj MSBuildToolsVersion: 3.5 MSBuildToolsPath: C:\Windows\Microsoft.NET\Framework\v3.5 projectB.proj MSBuildToolsVersion: 2.0 MSBuildToolsPath: C:\Windows\Microsoft.NET\Framework\v2.0.50727
Порядок приоритетов
В следующем списке показан порядок приоритетов от самого высокого до самого низкого: ToolsVersion
Атрибут
ToolsVersion
в задаче MSBuild, используемой для сборки проекта (если имеется).Параметр
-toolsversion
(или-tv
), который используется в команде msbuild.exe, если таковой имеется.Если задана переменная среды
MSBUILDTREATALLTOOLSVERSIONSASCURRENT
, используйте текущий параметрToolsVersion
.Если задана переменная среды
MSBUILDTREATHIGHERTOOLSVERSIONASCURRENT
и в файле проекта определен параметрToolsVersion
больший, чем текущий параметрToolsVersion
, используйте текущий параметрToolsVersion
.Если задана переменная среды
MSBUILDLEGACYDEFAULTTOOLSVERSION
или если не задан параметрToolsVersion
, используются следующие действия.Атрибут
ToolsVersion
элемента Project в файле проекта. Если этот атрибут не существует, предполагается, что используется текущая версия.Версия набора инструментов, заданная по умолчанию в файле MSBuild.exe.config.
Версия набора инструментов, заданная по умолчанию в реестре. Дополнительные сведения см. в статье Стандартные и настраиваемые конфигурации наборов инструментов.
Если переменная среды
MSBUILDLEGACYDEFAULTTOOLSVERSION
не задана, используются следующие действия.Если переменная среды
MSBUILDDEFAULTTOOLSVERSION
задана равной существующему параметруToolsVersion
, используйте ее.Если свойство
DefaultOverrideToolsVersion
задано в MSBuild.exe.config, используйте его.Если в реестре задано свойство
DefaultOverrideToolsVersion
, используйте его.В противном случае используйте текущий параметр
ToolsVersion
.