Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При выборе целевой платформы для приложения или библиотеки вы указываете набор API-интерфейсов, которые вы хотите сделать доступными для приложения или библиотеки. Целевая платформа указывается в файле проекта с помощью идентификатора целевой платформы (TFM).
Приложение или библиотека могут ориентироваться на версию .NET Standard. Версии .NET Standard представляют собой стандартизированные наборы API для всех реализаций .NET. Например, библиотека может нацеливаться на .NET Standard 1.6 и получать доступ к API, которые работают как в .NET Core, так и в .NET Framework, используя ту же базу кода.
Приложение или библиотека также может использовать конкретную реализацию .NET для получения доступа к API для конкретной реализации. Например, приложение, предназначенное для универсальная платформа Windows (UWP, uap10.0) имеет доступ к API, которые компилируются для устройств, работающих Windows 10.
Для некоторых целевых платформ, таких как .NET Framework, API определяются сборками, устанавливаемыми платформой в системе, и могут включать API платформы приложений (например, ASP.NET).
Для целевых платформ на основе пакетов (например, .NET 5+, .NET Core и .NET Standard) API определяются пакетами NuGet, включенными в приложение или библиотеку.
Последние версии
В следующей таблице описаны наиболее распространенные целевые платформы, способы их ссылки и версии, которые они реализуют в .NET Standard. Эти версии целевой платформ являются последними стабильными версиями. Предварительные версии здесь не упоминаются. Моникер платформы target (TFM) — это стандартный формат маркера для указания целевой платформы приложения или библиотеки .NET.
| Целевая платформа | Самый поздний Стабильная версия |
Идентификатор целевой платформы (TFM) | Реализованы версия .NET Standard |
|---|---|---|---|
| .NET 10 | 10 | net10.0 | 2.1 |
| .NET 9 | 9 | net9.0 | 2.1 |
| .NET 8 | 8 | net8.0 | 2.1 |
| .NET Standard | 2.1 | netstandard2.1 | Н/П |
| .NET Core | 3.1 | netcoreapp3.1 | 2.1 |
| платформа .NET | 4.8.1 | net481 | 2.0 |
Поддерживаемые целевые платформы
Целевая структура обычно обозначается как TFM. В следующей таблице показаны целевые платформы, поддерживаемые пакетом SDK .NET и клиентом NuGet. Эквивалентные обозначения отображаются в скобках. Например, win81 является эквивалентом TFM для netcore451.
| Целевая платформа | TFM |
|---|---|
| .NET 5+ (и .NET Core) | netcoreapp1.0 netcoreapp1.1 netcoreapp2.0 netcoreapp2.1 netcoreapp2.2 netcoreapp3.0 netcoreapp3.1 net5.0* net6.0* net7.0* net8.0* net9.0* net10.0* |
| .NET Standard | netstandard1.0 netstandard1.1 netstandard1.2 netstandard1.3. netstandard1.4 netstandard1.5 netstandard1.6 netstandard2.0 netstandard2.1 |
| платформа .NET | net11 net20 net35 net40 net403 net45. net451 net452 net46 net461 net462 net47 net471 net472 net48 net481 |
| Магазин Windows | netcore [netcore45] netcore45 [win] [win8] netcore451 [win81] |
| .NET nanoFramework | netnano1.0 |
| .NET Micro Framework | netmf |
| Silverlight | sl4 sl5 |
| телефон Windows | wp [wp7] wp7 wp75 wp8 wp81 wpa81 |
| универсальная платформа Windows | uap [uap10.0] uap10.0 [win10] [netcore50] |
* .NET 5 и более поздние версии TFM включают некоторые вариации операционных систем. Дополнительные сведения см. в следующем разделе, посвященном TFM для конкретной ОС.
TFM для конкретной ОС
TFM net8.0, net9.0, и net10.0 включают технологии, работающие на разных платформах. Указание ОС-специфичного TFM делает API-интерфейсы, относящиеся к операционной системе, доступными для вашего приложения, например, Windows Forms или привязки iOS. TFM, специфичные для конкретных ОС, также наследуют все API, доступные их базовому TFM, например net10.0 TFM.
В следующей таблице показана совместимость .NET 8 и более TFM.
| TFM | Совместимо с |
|---|---|
net8.0 |
(Последующую версию net7.0) |
net8.0-android |
(Последующую версию net7.0-android) |
net8.0-browser |
Все наследуется от net8.0 |
net8.0-ios |
(Последующую версию net7.0-ios) |
net8.0-maccatalyst |
(Последующую версию net7.0-maccatalyst) |
net8.0-macos |
(Последующую версию net7.0-macos) |
net8.0-tizen |
(Последующую версию net7.0-tizen) |
net8.0-tvos |
(Последующую версию net7.0-tvos) |
net8.0-windows |
(Последующую версию net7.0-windows) |
net9.0 |
(Последующую версию net8.0) |
net9.0-android |
(Последующую версию net8.0-android) |
net9.0-browser |
(Последующую версию net8.0-browser) |
net9.0-ios |
(Последующую версию net8.0-ios) |
net9.0-maccatalyst |
(Последующую версию net8.0-maccatalyst) |
net9.0-macos |
(Последующую версию net8.0-macos) |
net9.0-tizen |
(Последующую версию net8.0-tizen) |
net9.0-tvos |
(Последующую версию net8.0-tvos) |
net9.0-windows |
(Последующую версию net8.0-windows) |
net10.0 |
(Последующую версию net9.0) |
net10.0-android |
(Последующую версию net9.0-android) |
net10.0-browser |
(Последующую версию net9.0-browser) |
net10.0-ios |
(Последующую версию net9.0-ios) |
net10.0-maccatalyst |
(Последующую версию net9.0-maccatalyst) |
net10.0-macos |
(Последующую версию net9.0-macos) |
net10.0-tizen |
(Последующую версию net9.0-tizen) |
net10.0-tvos |
(Последующую версию net9.0-tvos) |
net10.0-windows |
(Последующую версию net9.0-windows) |
Чтобы сделать приложение кросс-платформенным, но при этом сохранить доступ к API определенных ОС, можно ориентироваться на несколько TFM для определенных операционных систем и добавить условия платформы для вызовов API, зависящих от операционной системы, с помощью директив препроцессора #if. Список доступных символов см. в разделе "Символы препроцессора".
Предлагаемые целевые объекты
Используйте эти рекомендации, чтобы определить, какие TFM использовать в приложении:
- Приложения, переносимые на несколько платформ, должны быть ориентированы на базовый TFM, например,
net10.0. Это включает в себя большинство библиотек, но и ASP.NET Core и Entity Framework. - Библиотеки для конкретных платформ должны быть ориентированы на варианты приложения для определенных платформ. Например, проекты WinForms и WPF должны быть нацелены на
net10.0-windows. - Кроссплатформенные модели приложений (например, ASP.NET Core) должны как минимум поддерживать базовый TFM, например
net10.0, но также могут нацеливать дополнительные платформенно-специфические варианты для поддержки дополнительных API или функций.
Версия ОС в TFM
Вы также можете указать необязательную версию ОС в конце TFM для конкретной ОС, например net8.0-ios17.2. Версия указывает, какие API-интерфейсы доступны для приложения или библиотеки. Он не управляет версией ОС, которую поддерживает ваше приложение или библиотека во время выполнения. Она используется для выбора ссылочных сборок, с которыми компилируется проект, а также для выбора ресурсов из пакетов NuGet. Эту версию можно считать версией платформы или версией API ОС, чтобы отличить её от версии ОС времени выполнения.
Пакет SDK .NET предназначен для поддержки недавно выпущенных API для отдельной платформы без новой версии базового TFM. Это позволяет получить доступ к функциям, зависящим от платформы, не ожидая основного выпуска .NET. Вы можете получить доступ к этим недавно выпущенным API-интерфейсам, увеличив версию платформы в TFM. Например, если платформа Android добавила API уровня 34 в обновление пакета SDK .NET 8.0.x, вы можете получить к ним доступ с помощью TFM net8.0-android34.0.
Если TFM конкретной ОС явно не указывает версию платформы, она имеет подразумеваемое значение, которое можно получить из базового TFM и имени платформы. Например, версия платформы по умолчанию для Android в .NET 9 — 35.0, что означает, что net9.0-android является сокращенной для канонического net9.0-android35.0 TFM. Сокращенная форма предназначена исключительно для использования в файлах проекта и преобразуется в каноническую форму с помощью целей MSBuild из .NET SDK перед передачей другим инструментам, таким как NuGet.
В следующей таблице показаны default целевая версия платформы (TPV) для Android и iOS для каждого выпуска .NET. Если вы хотите использовать последние привязки, используйте значение по умолчанию (т. е. не указывайте версию ОС).
| версия .NET | Андроид | iOS |
|---|---|---|
| .NET 8 | 34,0 | 17,2 |
| .NET 9 | 35,0 | 18,0 |
| .NET 10 | 36.0 | 18.7 |
Начиная с .NET 9, когда в выпуске служб представляется поддержка более поздней версии TPV (которая всегда будет иметь тот же major номер версии, что и изначально выпущенная версия .NET), самая ранняя поддерживаемая версия TPV для этой версии .NET останется поддерживаемой. Например, для .NET 9 самая ранняя поддерживаемая версия iOS 18.0 будет поддерживаться, даже если выпуск службы добавляет поддержку последней версии iOS 18.x. Если необходимо использовать наиболее ранние привязки для .NET релиза, используйте определенный номер версии ОС в TFM.
Примечание.
На платформах Apple (iOS, macOS, tvOS и Mac Catalyst) в .NET 8 и более ранних версий TPV по умолчанию является последней поддерживаемой версией в текущей установленной рабочей нагрузке. Это означает, что обновление рабочей нагрузки iOS в .NET 8, например, может привести к более высокому значению TPV по умолчанию, если добавлена поддержка новой версии iOS в этой рабочей нагрузке. В предыдущей таблице TPV по умолчанию — это версия в первоначальном выпуске для указанной .NET версии.
Начиная с .NET 9, это специальное поведение применяется только к проектам executable. TPV по умолчанию для проектов библиотеки теперь остается неизменным для всего основного выпуска .NET, как и для всех других платформ.
Приоритет
Если приложение ссылается на пакет с несколькими ресурсами для разных TFM, предпочтительнее использовать ресурсы, которые ближе к номеру версии. Например, если целевые объекты net9.0-ios приложения и пакет предлагают ресурсы для net9.0 и net8.0-iosиспользуются net9.0 ресурсы. Дополнительные сведения см. в разделе "Приоритеты".
Поддержка старых версий ОС
Несмотря на то что приложение или библиотека для конкретной платформы компилируются для API-интерфейсов из определенной версии этой ОС, вы можете сделать их совместимыми с более ранними версиями ОС, добавив свойство SupportedOSPlatformVersion в файл проекта. Свойство SupportedOSPlatformVersion указывает минимальную версию ОС, необходимую для запуска приложения или библиотеки. Если вы явно не указываете эту минимальную версию ОС среды выполнения в проекте, она по умолчанию использует версию платформы из TFM.
Чтобы приложение правильно выполнялось в более старой версии ОС, оно не может вызывать API-интерфейсы, которых нет в этой версии ОС. Однако можно добавить условия для вызовов к более новым API-интерфейсам, чтобы они вызывались только при работе в той версии ОС, которая их поддерживает. Этот шаблон позволяет проектировать приложение или библиотеку для поддержки работы в более старых версиях ОС, используя преимущества новых функций ОС при работе в более новых версиях ОС.
Значение SupportedOSPlatformVersion (явное или по умолчанию) используется анализатором совместимости платформ, который обнаруживает и предупреждает о незащищенных вызовах к более новым API-интерфейсам. Оно записывается в скомпилированную сборку проекта как атрибут сборки UnsupportedOSPlatformAttribute, чтобы анализатор совместимости платформ мог обнаруживать незащищенные вызовы к API-интерфейсам сборки из проектов с меньшим значением SupportedOSPlatformVersion. На некоторых платформах значение SupportedOSPlatformVersion влияет на процессы упаковки и сборки приложений для конкретных платформ, которые рассматриваются в документации по этим платформам.
В следующем примере представлен фрагмент файла проекта, использующего свойства MSBuildTargetFramework, чтобы SupportedOSPlatformVersion указать, что приложение или библиотека имеет доступ к API iOS 15.0, но поддерживает выполнение в iOS 13.0 и более поздних версиях:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0-ios15.0</TargetFramework>
<SupportedOSPlatformVersion>13.0</SupportedOSPlatformVersion>
</PropertyGroup>
...
</Project>
Как указать целевую платформу
Целевые платформы указываются в файле проекта. Если указана одна целевая платформа, используйте элемент TargetFramework. В следующем файле проекта консольного приложения показано, как использовать .NET 10:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
</Project>
При указании нескольких целевых платформ можно условно ссылаться на сборки для каждой целевой платформы. В коде можно условно скомпилировать эти сборки с помощью символов препроцессора с логикой if-then-else .
Следующий проект библиотеки предназначен для API .NET Standard (netstandard1.4) и платформы .NET (net40 и net45). Используйте множественный элемент TargetFrameworks с несколькими целевыми платформами. Атрибуты Condition включают пакеты, специфичные для реализации, когда библиотека компилируется для двух TFM платформ .NET Framework.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard1.4;net40;net45</TargetFrameworks>
</PropertyGroup>
<!-- Conditionally obtain references for the .NET Framework 4.0 target -->
<ItemGroup Condition=" '$(TargetFramework)' == 'net40' ">
<Reference Include="System.Net" />
</ItemGroup>
<!-- Conditionally obtain references for the .NET Framework 4.5 target -->
<ItemGroup Condition=" '$(TargetFramework)' == 'net45' ">
<Reference Include="System.Net.Http" />
<Reference Include="System.Threading.Tasks" />
</ItemGroup>
</Project>
В библиотеке или приложении следует написать условный код компиляции с помощью директив препроцессора для каждой целевой платформы.
public class MyClass
{
static void Main()
{
#if NET40
Console.WriteLine("Target framework: .NET Framework 4.0");
#elif NET45
Console.WriteLine("Target framework: .NET Framework 4.5");
#else
Console.WriteLine("Target framework: .NET Standard 1.4");
#endif
}
}
Значения TargetFramework — это псевдонимы
Значение свойства TargetFramework (например, net10.0) — это понятное имя или псевдоним, который SDK .NET преобразует в канонические свойства идентификатора. В частности, пакет SDK задает следующие свойства из значения TargetFramework:
-
TargetFrameworkMoniker(например,.NETCoreApp,Version=v10.0) -
TargetFrameworkIdentifier(например,.NETCoreApp) -
TargetFrameworkVersion(например,v10.0) -
TargetPlatformMoniker,TargetPlatformIdentifierиTargetPlatformVersion(при нацеливание на определенную платформу)
NuGet и пакет SDK .NET используют эти свойства моникера , а не строку TargetFramework для проверок совместимости пакетов и логики сборки. Этот перевод уже выполняется для TFM, относящихся к ОС. Например, net10.0-windows преобразуется в TargetFrameworkMoniker = .NETCoreApp,Version=v10.0 и TargetPlatformMoniker = Windows,Version=7.0.
Так как псевдоним является только именем, значение может быть любой буквенно-цифровой строкой, TargetFramework если соответствующие свойства моникера заданы правильно. Следующий файл проекта использует настраиваемый псевдоним с именем banana и явно задает свойства моникера, чтобы проект собирается и восстанавливается для .NET 10.0.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>banana</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition=" '$(TargetFramework)' == 'banana' ">
<TargetFrameworkIdentifier>.NETCoreApp</TargetFrameworkIdentifier>
<TargetFrameworkVersion>v10.0</TargetFrameworkVersion>
<TargetFrameworkMoniker>.NETCoreApp,Version=v10.0</TargetFrameworkMoniker>
</PropertyGroup>
</Project>
Дополнительные сведения об этих свойствах см. в справочнике по свойству TargetFramework MSBuild.
Символы препроцессора
Система сборки учитывает символы препроцессора, представляющие целевые платформы, которые приведены в таблице Поддерживаемые версии целевой платформы, при использовании проектов в стиле SDK. Чтобы преобразовать .NET Standard, .NET Core или .NET 5+ TFM в символ препроцессора, замените точки и дефисы символами подчеркивания и измените строчные буквы на верхний регистр (например, символ netstandard2.0 имеет значение NETSTANDARD2_0).
Вы можете отключить создание этих символов с помощью DisableImplicitFrameworkDefines свойства. Дополнительные сведения об этом свойстве см. в разделе DisableImplicitFrameworkDefines.
Полный список символов препроцессора для целевых платформ .NET:
| Целевые фреймворки | Символы | Дополнительные символы (доступно в SDK для .NET 5+) |
Символы платформы (доступны только при указании TFM для конкретной ОС) |
|---|---|---|---|
| платформа .NET |
NETFRAMEWORK,NET481,NET48,NET472,NET471,NET47,NET462,NET461,NET46,NET452,NET451,NET45,NET40,NET35,NET20 |
NET48_OR_GREATER, NET472_OR_GREATER, NET471_OR_GREATERNET47_OR_GREATERNET462_OR_GREATERNET461_OR_GREATERNET46_OR_GREATERNET452_OR_GREATERNET451_OR_GREATERNET45_OR_GREATERNET40_OR_GREATERNET35_OR_GREATERNET20_OR_GREATER |
|
| .NET Standard |
NETSTANDARD, NETSTANDARD2_1, NETSTANDARD2_0, NETSTANDARD1_6, NETSTANDARD1_5, NETSTANDARD1_4, NETSTANDARD1_3, NETSTANDARD1_2, NETSTANDARD1_1, NETSTANDARD1_0 |
NETSTANDARD2_1_OR_GREATER, NETSTANDARD2_0_OR_GREATERNETSTANDARD1_6_OR_GREATERNETSTANDARD1_5_OR_GREATERNETSTANDARD1_4_OR_GREATERNETSTANDARD1_3_OR_GREATERNETSTANDARD1_2_OR_GREATERNETSTANDARD1_1_OR_GREATERNETSTANDARD1_0_OR_GREATER |
|
| .NET 5+ (и .NET Core) |
NET,NET10_0,NET9_0,NET8_0,NET7_0,NET6_0,NET5_0,NETCOREAPP,NETCOREAPP3_1,NETCOREAPP3_0,NETCOREAPP2_2,NETCOREAPP2_1,NETCOREAPP2_0,NETCOREAPP1_1,NETCOREAPP1_0 |
NET10_0_OR_GREATER, NET9_0_OR_GREATER, NET8_0_OR_GREATERNET7_0_OR_GREATERNET6_0_OR_GREATERNET5_0_OR_GREATERNETCOREAPP3_1_OR_GREATERNETCOREAPP3_0_OR_GREATERNETCOREAPP2_2_OR_GREATERNETCOREAPP2_1_OR_GREATERNETCOREAPP2_0_OR_GREATERNETCOREAPP1_1_OR_GREATERNETCOREAPP1_0_OR_GREATER |
ANDROID, BROWSER, IOSMACCATALYSTMACOSTVOSWINDOWS[OS][version] (например IOS15_1),[OS][version]_OR_GREATER (например IOS15_1_OR_GREATER) |
Примечание.
- Символы без привязки к версии определены независимо от версии, которую вы хотите использовать в качестве целевой.
- Символы, специфичные для версии, определяются только для целевой версии.
- Символы
<framework>_OR_GREATERопределены для версии, которую вы хотите использовать в качестве целевой, и всех более ранних версий. Например, если вы используете платформу .NET Framework 2.0, определены следующие символы:NET20,NET20_OR_GREATER,NET11_OR_GREATERиNET10_OR_GREATER. - Символы
NETSTANDARD<x>_<y>_OR_GREATERопределяются только для целевых объектов .NET категории "Стандартный", а не для целевых объектов, реализующих .NET Standard, таких как .NET Core и .NET Framework. - Они отличаются от моникеров целевой платформы (TFM), используемых свойством
TargetFrameworkи NuGet.
Устаревшие целевые фреймворки
Следующие целевые платформы являются устаревшими. Пакеты, предназначенные для этих целевых платформ, следует перевести на предлагаемые для замены.
| Устаревший TFM | Замена |
|---|---|
| aspnet50 aspnetcore50 dnxcore50 dnx dnx45 dnx451 dnx452 |
netcoreapp |
| dotnet dotnet50 dotnet51 dotnet52 dotnet53 dotnet54 dotnet555 dotnet56 |
netstandard |
| netcore50 | uap10.0 |
| победа | netcore45 |
| Windows 8 | netcore45 |
| Windows 8.1 | netcore451 |
| Windows 10 | uap10.0 |
| winrt | netcore45 |
См. также
- имена целевых платформ в .NET 5
- .NET standard
- .NET управление версиями
- сведения о выпуске Windows 11