Требуемые версии .NET FrameworkTarget frameworks

При выборе целевой платформы для приложения или библиотеки вы указываете набор API-интерфейсов, которые вы хотите сделать доступными для приложения или библиотеки.When you target a framework in an app or library, you're specifying the set of APIs that you'd like to make available to the app or library. Целевая платформа указывается в файле проекта с помощью моникеров целевой платформы (TFM).You specify the target framework in your project file using Target Framework Monikers (TFMs).

Приложение или библиотека могут быть предназначены для версии .NET Standard.An app or library can target a version of .NET Standard. Версии .NET Standard представляют стандартные наборы API-интерфейсов во всех реализациях .NET..NET Standard versions represent standardized sets of APIs across all .NET implementations. Например, библиотека может быть предназначена для .NET Standard 1.6 и получить доступ к API-интерфейсам, которые работают в .NET Core и .NET Framework с одной и той же базой кода.For example, a library can target .NET Standard 1.6 and gain access to APIs that function across .NET Core and .NET Framework using the same codebase.

Приложение или библиотека могут также работать в конкретной реализации .NET. В этом случае они получают доступ к API-интерфейсам конкретной реализации.An app or library can also target a specific .NET implementation to gain access to implementation-specific APIs. Например, приложение, предназначенное для Xamarin.iOS (например, Xamarin.iOS10), получает доступ к предоставленным Xamarin iOS программам-оболочкам API для iOS 10 или приложение, ориентированное на универсальную платформу Windows (UWP, uap10.0) имеет доступ к API-интерфейсам, которые компилируется для устройств под управлением Windows 10.For example, an app that targets Xamarin.iOS (for example, Xamarin.iOS10) gets access to Xamarin-provided iOS API wrappers for iOS 10, or an app that targets the Universal Windows Platform (UWP, uap10.0) has access to APIs that compile for devices that run Windows 10.

Для некоторых целевых платформ (например, .NET Framework) API-интерфейсы определяются сборками, устанавливаемыми платформой в системе, в число которых могут входить API-интерфейсы платформы приложений (например, ASP.NET).For some target frameworks (for example, the .NET Framework), the APIs are defined by the assemblies that the framework installs on a system and may include application framework APIs (for example, ASP.NET).

Для целевых платформ на основе пакетов (например, .NET Standard и .NET Core) API-интерфейсы определяются пакетами в составе приложения или библиотеки.For package-based target frameworks (for example, .NET Standard and .NET Core), the APIs are defined by the packages included in the app or library. Метапакет — это пакет NuGet, не имеющий собственного содержимого, но имеющий список зависимостей (другие пакеты).A metapackage is a NuGet package that has no content of its own but is a list of dependencies (other packages). В этом случае целевая платформа на основе пакетов NuGet неявно задает метапакет, который ссылается на все пакеты, составляющие платформу.A NuGet package-based target framework implicitly specifies a metapackage that references all the packages that together make up the framework.

Последние версии целевой платформыLatest target framework versions

В приведенной ниже таблице определены наиболее распространенные целевые платформы, способы их указания и реализованные в них версии .NET Standard.The following table defines the most common target frameworks, how they're referenced, and which version of the .NET Standard they implement. Эти версии целевой платформ являются последними стабильными версиями.These target framework versions are the latest stable versions. Предварительные версии здесь не упоминаются.Pre-release versions aren't shown. Моникер целевой платформы (TFM) является стандартизированный форматом маркера для указания целевой платформы приложения или библиотеки .NET.A Target Framework Moniker (TFM) is a standardized token format for specifying the target framework of a .NET app or library.

Требуемая версия .NET FrameworkTarget Framework Последняя версияLatest
Стабильная версияStable Version
Моникер целевой платформы (TFM)Target Framework Moniker (TFM) РеализованоImplemented
Версия .NET Standard.NET Standard Version
.NET Standard.NET Standard 2.02.0 netstandard2.0netstandard2.0 Н/ДN/A
.NET Core.NET Core 2.22.2 netcoreapp2.2netcoreapp2.2 2.02.0
.NET Framework.NET Framework 4.84.8 net48net48 2.02.0

Поддерживаемые версии целевой платформыSupported target framework versions

Целевая платформа обычно называется по TFM.A target framework is typically referenced by a TFM. В следующей таблице показаны целевые платформы, поддерживаемые пакетом SDK для .NET Core и клиентом NuGet.The following table shows the target frameworks supported by the .NET Core SDK and the NuGet client. Эквивалентные обозначения отображаются в скобках.Equivalents are shown within brackets. Например, win81 является эквивалентом TFM для netcore451.For example, win81 is an equivalent TFM to netcore451.

Требуемая версия .NET FrameworkTarget Framework TFMTFM
.NET Standard.NET Standard netstandard1.0netstandard1.0
netstandard1.1netstandard1.1
netstandard1.2netstandard1.2
netstandard1.3netstandard1.3
netstandard1.4netstandard1.4
netstandard1.5netstandard1.5
netstandard1.6netstandard1.6
netstandard2.0netstandard2.0
.NET Core.NET Core netcoreapp1.0netcoreapp1.0
netcoreapp1.1netcoreapp1.1
netcoreapp2.0netcoreapp2.0
netcoreapp2.1netcoreapp2.1
netcoreapp2.2netcoreapp2.2
.NET Framework.NET Framework net11net11
net20net20
net35net35
net40net40
net403net403
net45net45
net451net451
net452net452
net46net46
net461net461
net462net462
net47net47
net471net471
net472net472
net48net48
Магазин WindowsWindows Store netcore [netcore45]netcore [netcore45]
netcore45 [win] [win8]netcore45 [win] [win8]
netcore451 [win81]netcore451 [win81]
.NET Micro Framework.NET Micro Framework netmfnetmf
SilverlightSilverlight sl4sl4
sl5sl5
Windows PhoneWindows Phone wp [wp7]wp [wp7]
wp7wp7
wp75wp75
wp8wp8
wp81wp81
wpa81wpa81
Универсальная платформа Windows Universal Windows Platform uap [uap10.0]uap [uap10.0]
uap10.0 [win10] [netcore50]uap10.0 [win10] [netcore50]

Как указать целевые платформыHow to specify target frameworks

Целевые платформы указываются в файле проекта.Target frameworks are specified in your project file. Если указана одна целевая платформа, используйте элемент TargetFramework.When a single target framework is specified, use the TargetFramework element. В следующем файле проекта консольного приложения показано, как указать целевую платформу .NET Core 2.2:The following console app project file demonstrates how to target .NET Core 2.2:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.2</TargetFramework>
  </PropertyGroup>

</Project>

При указании нескольких целевых платформ можно условно ссылаться на сборки для каждой целевой платформы.When you specify multiple target frameworks, you may conditionally reference assemblies for each target framework. В коде можно условно компилировать эти сборки с использованием символов препроцессора с логикой if-then-else.In your code, you can conditionally compile against those assemblies by using preprocessor symbols with if-then-else logic.

Следующий файл проекта библиотеки предназначен для API-интерфейсов .NET Standard (netstandard1.4) и API-интерфейсов .NET Framework (net40 и net45).The following library project file targets APIs of .NET Standard (netstandard1.4) and APIs of the .NET Framework (net40 and net45). Используйте множественный элемент TargetFrameworks с несколькими целевыми платформами.Use the plural TargetFrameworks element with multiple target frameworks. Обратите внимание, каким образом атрибуты Condition включают пакеты, связанные с конкретной реализацией, при компиляции библиотеки для двух TFM .NET Framework.Note how the Condition attributes include implementation-specific packages when the library is compiled for the two .NET Framework TFMs:

<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>

В библиотеке или приложении следует написать условный код компиляции для каждой целевой платформы.Within your library or app, you write conditional code to compile for each target framework:

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
    }
}

Система сборки учитывает символы препроцессора, представляющие целевые платформы, приведенные в таблице Поддерживаемые версии целевой платформы.The build system is aware of preprocessor symbols representing the target frameworks shown in the Supported target framework versions table. При использовании символа, представляющего TFM .NET Standard или .NET Core, замените точку символом подчеркивания и измените строчные буквы на прописные (например, символ для netstandard1.4 — NETSTANDARD1_4).When using a symbol that represents a .NET Standard or .NET Core TFM, replace the dot with an underscore and change lowercase letters to uppercase (for example, the symbol for netstandard1.4 is NETSTANDARD1_4).

Полный список символов препроцессора для целевой платформы .NET Core.The complete list of preprocessor symbols for .NET Core target frameworks is:

Требуемые версии .NET FrameworkTarget Frameworks СимволыSymbols
.NET Framework.NET Framework NETFRAMEWORK, NET20, NET35, NET40, NET45, NET451, NET452, NET46, NET461, NET462, NET47, NET471, NET472, NET48NETFRAMEWORK, NET20, NET35, NET40, NET45, NET451, NET452, NET46, NET461, NET462, NET47, NET471, NET472, NET48
.NET Standard.NET Standard NETSTANDARD, NETSTANDARD1_0, NETSTANDARD1_1, NETSTANDARD1_2, NETSTANDARD1_3, NETSTANDARD1_4, NETSTANDARD1_5, NETSTANDARD1_6, NETSTANDARD2_0NETSTANDARD, NETSTANDARD1_0, NETSTANDARD1_1, NETSTANDARD1_2, NETSTANDARD1_3, NETSTANDARD1_4, NETSTANDARD1_5, NETSTANDARD1_6, NETSTANDARD2_0
.NET Core.NET Core NETCOREAPP, NETCOREAPP1_0, NETCOREAPP1_1, NETCOREAPP2_0, NETCOREAPP2_1, NETCOREAPP2_2NETCOREAPP, NETCOREAPP1_0, NETCOREAPP1_1, NETCOREAPP2_0, NETCOREAPP2_1, NETCOREAPP2_2

Неподдерживаемые целевые платформыDeprecated target frameworks

Следующие целевые платформы являются устаревшими.The following target frameworks are deprecated. Пакеты, предназначенные для этих целевых платформ, следует перевести на предлагаемые для замены.Packages targeting these target frameworks should migrate to the indicated replacements.

Нерекомендуемый TFMDeprecated TFM ЗаменаReplacement
aspnet50aspnet50
aspnetcore50aspnetcore50
dnxcore50dnxcore50
dnxdnx
dnx45dnx45
dnx451dnx451
dnx452dnx452
netcoreappnetcoreapp
dotnetdotnet
dotnet50dotnet50
dotnet51dotnet51
dotnet52dotnet52
dotnet53dotnet53
dotnet54dotnet54
dotnet55dotnet55
dotnet56dotnet56
netstandardnetstandard
netcore50netcore50 uap10.0uap10.0
winwin netcore45netcore45
win8win8 netcore45netcore45
win81win81 netcore451netcore451
win10win10 uap10.0uap10.0
winrtwinrt netcore45netcore45

См. такжеSee also