Переопределение параметров ToolsVersion
Набор инструментов для проектов и решений можно изменить одним из трех способов:
Используя переключатель /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="https://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="https://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.
См. также
Основные понятия
Набор инструментов MSBuild (ToolsVersion)
Стандартные и настраиваемые конфигурации наборов инструментов