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


Указание конкретной платформы .NET Framework с помощью MSBuild

Обновлен: Ноябрь 2007

Visual Studio 2008 и MSBuild 3.5 позволяют указать несколько версий платформы .NET Framework (версии 2.0, 3.0 и 3.5) при создании или построении проектов. Эта возможность называется настройкой для различных версий. В MSBuild настройка для различных версий осуществляется с помощью нового атрибута с именем ToolsVersion (см. Элемент Project (MSBuild)).

Наборы инструментов, требуемые версии .NET Framework и атрибут ToolsVersion

Чтобы понять принцип работы MSBuild с Visual Studio 2008, необходимо знать, в чем различие между набором инструментов и требуемой версией .NET Framework и как каждый из этих элементов взаимодействует с новым атрибутом ToolsVersion. С помощью всех этих элементов определяется, как MSBuild 3.5 создает проекты.

Набор инструментов

Набор инструментов — это подобранный комплект задач MSBuild, целевых объектов MSBuild и средств, который устанавливается вместе с MSBuild и .NET Framework. В набор инструментов входят компиляторы (такие как csc.exe и vbc.exe), файл общих целевых объектов (microsoft.common.targets) и файл общих задач (microsoft.common.tasks). Набор инструментов версии 3.5 можно использовать с целевым объектом платформы .NET Framework версий 2.0 и 3.0. Однако набор инструментов версии 2.0 можно использовать только с целевым объектом платформы .NET Framework версии 2.0.

Visual Studio 2008 устанавливает платформу .NET Framework 3.5, включающую два предопределенных набора инструментов: один для .NET Framework 2.0, а другой для платформы .NET Framework версии 3.5. Для платформы .NET Framework версии 3.0, предоставляемой вместе с Windows Vista, наборы инструментов не определены. Набор инструментов .NET Framework 2.0 может применяться только для .NET Framework 2.0, а набор инструментов .NET Framework 3.5 — для .NET Framework версии 2.0, 3.0 или 3.5.

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

Требуемая версия .NET Framework

Требуемая версия .NET Framework — это конкретная версия платформы .NET Framework, в которой будет выполняться создаваемый проект. Она необходима, поскольку позволяет использовать возможности компилятора, предназначенные исключительно для этой версии платформы .NET Framework 2.0, или ссылки на сборки, поставляемые только в этой версии архитектуры.

В настоящее время в Visual Studio 2008 можно использовать три версии платформы .NET Framework:

  • .NET Framework 2.0 (входит в состав Visual Studio).

  • .NET Framework 3.0 (входит в состав Windows Vista).

  • .NET Framework 3.5 (входит в состав Visual Studio 2008).

Хотя это три различные версии платформы .NET Framework, все они созданы на основе базовой среды CLR версии 2.0, которая вошла в состав Visual Studio 2005.

Требуемая версия .NET Framework указана в файле проекта с помощью свойства TargetFrameworkVersion. Visual Studio задает это значение при переключении требуемой версии .NET Framework через интегрированную среду разработки (IDE). (Дополнительные сведения см. в разделе Практическое руководство. Назначение целевой версии .NET Framework.) Возможные значения свойства TargetFrameworkVersion: v2.0, v3.0 и v3.5. Оно задается в виде свойства MSBuild, например:

<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>

Атрибут ToolsVersion

Версию набора инструментов можно задать в файле проекта с помощью атрибута ToolsVersion в Элемент Project (MSBuild). В следующем примере указывается, что проект должен быть создан с использованием набора инструментов платформы .NET Framework 2.0 2.0:

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

Если при создании решения или проекта указать в командной строке атрибут ToolsVersion для msbuild.exe, это приведет к тому, что все проекты и зависимости между этими проектами будут построены в соответствии с этим атрибутом ToolsVersion, даже если в проекте решения указывается свой атрибут ToolsVersion в Элемент Project (MSBuild).

Различия между версиями платформы .NET Framework

В основе всех трех версий .NET Framework лежит версия 2.0 среды CLR. Версии .NET Framework отличаются друг от друга списком сборок, предоставляемых каждой версией пользователю для ссылок в его проектах. Например, новая технология LINQ, включенная в состав Visual Studio 2008. .NET Framework 3.5 — единственная версия платформы .NET Framework, в которой представлены сборки, связанные с технологией LINQ. Поэтому LINQ можно использовать только в том случае, если проект предназначается специально для .NET Framework 3.5. Аналогично, в состав Windows Vista входит Windows Presentation Foundation (WPF). Создавать приложения WPF можно только в том случае, если проект предназначается для .NET Framework 3.0 или более поздних версий .NET Framework.

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

Поиск наборов инструментов в проектах

Чтобы создать проект, Visual Studio 2008 необходим набор инструментов. MSBuild определяет расположение целевых объектов и задач с помощью свойства $(MSBuildToolsPath). Например, MSBuild ищет файл Microsoft.CSharp.targets, используя следующий XML-элемент:

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

Microsoft.CSharp.targets — это пример ориентированного на конкретный язык процесса построения, который используется Visual Studio 2008 для создания проектов Visual C#. $(MSBuildToolsPath) определяет путь к соответствующей версии .NET Framework, в которой установлен процесс Microsoft.CSharp.targets (например, C:\Windows\Microsoft.Net\Framework\v2.0.50727).

Прежде чем создать проект с использованием набора инструментов MSBuild 3.5, необходимо установить $(MSBuildToolsPath) в расположение установки MSBuild 3.5, чтобы набор инструментов импортировал версию Visual Studio 2008 процесса Microsoft.CSharp.targets.

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

Принцип действия атрибута ToolsVersion

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

Если значение ToolsVersion определено в файле проекта, MSBuild с помощью этого значения определяет значения для $(MSBuildToolsPath) (или $(MSBuildBinPath)) — пути к инструментам MSBuild. Если значение ToolsVersion не определено, MSBuild продолжает использовать прежний путь к набору инструментов, исходя из предположения, что проект является проектом Visual Studio 2005.

Если существующий проект Visual Studio 2005 открыть в Visual Studio 2008, он физически "обновляется" за счет включения назначения "ToolsVersion=3.5", поскольку Visual Studio 2008 поддерживает только построение с помощью набора инструментов версии 3.5. В результате, когда проект создается в Visual Studio 2008, в нем используется набор инструментов Visual Studio 2008 (3.5) вместо набора инструментов Visual Studio (2.0).

Проекты, созданные с помощью набора инструментов версии 2.0, могут предназначаться для .NET Framework 2.0, а проекты, созданные с помощью набора инструментов версии 3.5 — для .NET Framework версии 2.0, 3.0 или 3.5. Даже в том случае, если была выполнена миграция проекта Visual Studio в Visual Studio 2008 и обновление для использования набора инструментов версии 3.5, требуемой версией .NET Framework для проекта останется .NET Framework 2.0. Этим гарантируется, что в случае выполнения миграции проекта в Visual Studio 2008 не появятся новые зависимости. Построение проекта выполняется в точности так, как для Visual Studio.

Bb383796.alert_note(ru-ru,VS.90).gifПримечание.

Если атрибут ToolsVersion уже определен в проекте, Visual Studio 2008 не изменит его значение. Значение ToolsVersion можно переопределить. Дополнительные сведения см. в разделе Переопределение параметров ToolsVersion.

Совместимость Visual Studio 2005 и MSBuild 3.5

Visual Studio 2005 не удается открывать или создавать проекты Visual Studio 2008 или проекты, для которых выполнено обновление на Visual Studio 2008. Но с помощью набора инструментов MSBuild 2.0 можно создавать проекты Visual Studio 2008, если в них не используются новые возможности, характерные для набора инструментов Visual Studio 2008, такие как функция LINQ, новая функция Visual C# 2008, функции с использованием синтаксиса Visual Basic 2008 и т.д.

См. также

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

Переопределение параметров ToolsVersion

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