Platformy docelowe w projektach w stylu SDKTarget frameworks in SDK-style projects

Podczas kierowania struktury w aplikacji lub bibliotece, określasz zestaw interfejsów API, które chcesz udostępnić w aplikacji lub bibliotece.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. Należy określić platformę docelową w pliku projektu przy użyciu target framework monikers (TFM).You specify the target framework in your project file using Target Framework Monikers (TFMs).

Aplikacja lub biblioteka może kierować na wersję programu .NET Standard.An app or library can target a version of .NET Standard. Wersje standardu .NET reprezentują znormalizowane zestawy interfejsów API we wszystkich implementacjach .NET..NET Standard versions represent standardized sets of APIs across all .NET implementations. Na przykład biblioteka może kierować .NET Standard 1.6 i uzyskać dostęp do interfejsów API, które działają w programie .NET Core i .NET Framework przy użyciu tej samej bazy kodu.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.

Aplikacja lub biblioteka może również kierować określoną implementację .NET, aby uzyskać dostęp do interfejsów API specyficznych dla implementacji.An app or library can also target a specific .NET implementation to gain access to implementation-specific APIs. Na przykład aplikacja przeznaczona dla systemu Xamarin.iOS (na Xamarin.iOS10przykład) uzyskuje dostęp do otoki interfejsu API systemu IOS dostarczonego przez platformę uap10.0IOS dla systemu iOS 10 lub aplikacji przeznaczonej dla platformy uniwersalnej systemu Windows (UWP) ma dostęp do interfejsów API kompilowanych dla urządzeń z systemem 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.

W przypadku niektórych platform docelowych (na przykład .NET Framework) interfejsy API są definiowane przez zestawy, które struktura instaluje w systemie i mogą obejmować interfejsy API platformy aplikacji (na przykład 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).

W przypadku platform docelowych opartych na pakietach (na przykład .NET Standard i .NET Core) interfejsy API są definiowane przez pakiety zawarte w aplikacji lub bibliotece.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. Metapakiet jest pakietEm NuGet, który nie ma własnej zawartości, ale jest listą zależności (innych pakietów).A metapackage is a NuGet package that has no content of its own but is a list of dependencies (other packages). Platforma docelowa oparta na pakiecie NuGet niejawnie określa metapakiet, który odwołuje się do wszystkich pakietów, które razem tworzą strukturę.A NuGet package-based target framework implicitly specifies a metapackage that references all the packages that together make up the framework.

Najnowsze wersje struktury docelowejLatest target framework versions

W poniższej tabeli zdefiniowano najbardziej typowe platformy docelowe, jak się do nich odwołuje i którą wersję standardu .NET, którą implementują.The following table defines the most common target frameworks, how they're referenced, and which version of the .NET Standard they implement. Te wersje platformy docelowej są najnowsze wersje stabilne.These target framework versions are the latest stable versions. Wersje wstępne nie są wyświetlane.Pre-release versions aren't shown. Target Framework Moniker (TFM) jest znormalizowany format tokenu do określania struktury docelowej aplikacji lub biblioteki .NET.A Target Framework Moniker (TFM) is a standardized token format for specifying the target framework of a .NET app or library.

Struktura docelowaTarget Framework NajnowszaLatest
Stabilna wersjaStable Version
Domina platformy docelowej (TFM)Target Framework Moniker (TFM) ZaimplementowanaImplemented
Wersja standardowa .NET.NET Standard Version
.NET Standard.NET Standard 2.12.1 standard netto2,1netstandard2.1 Nie dotyczyN/A
.NET Core.NET Core 3.13.1 netcoreapp3,1netcoreapp3.1 2.12.1
.NET Framework.NET Framework 4.84.8 netto48net48 2.02.0

Obsługiwane wersje struktury docelowejSupported target framework versions

Platforma docelowa jest zazwyczaj odwołuje się do TFM.A target framework is typically referenced by a TFM. W poniższej tabeli przedstawiono struktury docelowe obsługiwane przez zestaw SDK .NET Core i klienta NuGet.The following table shows the target frameworks supported by the .NET Core SDK and the NuGet client. Odpowiedniki są wyświetlane w nawiasach.Equivalents are shown within brackets. Na przykład win81 jest odpowiednikiem netcore451TFM do .For example, win81 is an equivalent TFM to netcore451.

Struktura docelowaTarget Framework TfmTFM
.NET Standard.NET Standard standard netto1,0netstandard1.0
standard netto1,1netstandard1.1
standard netto1,2netstandard1.2
standard netto1,3netstandard1.3
standard netto1,4netstandard1.4
standard netto1,5netstandard1.5
standard netto1,6netstandard1.6
standard netto2,0netstandard2.0
standard netto2,1netstandard2.1
.NET Core.NET Core netcoreapp1.0netcoreapp1.0
netcoreapp1.1netcoreapp1.1
netcoreapp2.0netcoreapp2.0
netcoreapp2.1netcoreapp2.1
netcoreapp2,2netcoreapp2.2
netcoreapp3.0netcoreapp3.0
netcoreapp3,1netcoreapp3.1
.NET Framework.NET Framework netto11net11
netto20net20
netto35net35
netto40net40
netto403net403
netto45net45
netto451net451
netto452net452
netto46net46
net461net461
netto462net462
netto47net47
netto471net471
netto472net472
netto48net48
Windows StoreWindows Store netcore [netcore45]netcore [netcore45]
netcore45 [wygrana] [win8]netcore45 [win] [win8]
netcore451 [win81]netcore451 [win81]
Platforma .NET Micro Framework.NET Micro Framework netmf ( netmf )netmf
SilverlightSilverlight sl4sl4
sl5sl5
Windows PhoneWindows Phone wp [wp7]wp [wp7]
wp7wp7
wp75wp75
wp8wp8
wp81wp81
wpa81wpa81
Platforma uniwersalna systemu WindowsUniversal Windows Platform uap [uap10.0]uap [uap10.0]
uap10.0 [win10] [netcore50]uap10.0 [win10] [netcore50]

Jak określić ramy doceloweHow to specify target frameworks

Platformy docelowe są określone w pliku projektu.Target frameworks are specified in your project file. Po określeniu pojedynczej platformy docelowej należy użyć elementu TargetFramework.When a single target framework is specified, use the TargetFramework element. Następujący plik projektu aplikacji konsoli pokazuje, jak kierować.NET Core 3.0:The following console app project file demonstrates how to target .NET Core 3.0:

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

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
  </PropertyGroup>

</Project>

Po określeniu wielu platform docelowych, można warunkowo odwoływać się do zestawów dla każdej platformy docelowej.When you specify multiple target frameworks, you may conditionally reference assemblies for each target framework. W kodzie można warunkowo skompilować względem tych zestawów przy użyciu symboli preprocesora z logiką if-then-else.In your code, you can conditionally compile against those assemblies by using preprocessor symbols with if-then-else logic.

Następujący plik projektu biblioteki jest przeznaczony dlanetstandard1.4interfejsów API standardunet40 .NET ( ) i interfejsów API programu .NET Framework ( i net45).The following library project file targets APIs of .NET Standard (netstandard1.4) and APIs of the .NET Framework (net40 and net45). Użyj elementu TargetFrameworks w liczbie mnogiej z wieloma platformami docelowymi.Use the plural TargetFrameworks element with multiple target frameworks. Należy zauważyć, Condition jak atrybuty obejmują pakiety specyficzne dla implementacji, gdy biblioteka jest kompilowana dla dwóch tfmów .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>

W bibliotece lub aplikacji piszesz kod warunkowy do kompilacji dla każdej struktury docelowej: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
    }
}

System kompilacji jest świadomy symboli preprocesora reprezentujących platformdocelowych pokazano w obsługiwane wersje struktury docelowej tabeli, gdy używasz projektów w stylu SDK.The build system is aware of preprocessor symbols representing the target frameworks shown in the Supported target framework versions table when you're using SDK-style projects. W przypadku używania symbolu reprezentującego standard .NET lub .NET Core TFM, zamień kropkę na znak podkreślenia i zmień małe litery na wielkie litery (na przykład symbolem jest 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).

Pełna lista symboli preprocesora dla platform docelowych .NET Core jest:The complete list of preprocessor symbols for .NET Core target frameworks is:

Platformy doceloweTarget Frameworks SymboleSymbols
.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_0, NETSTANDARD2_1NETSTANDARD, NETSTANDARD1_0, NETSTANDARD1_1, NETSTANDARD1_2, NETSTANDARD1_3, NETSTANDARD1_4, NETSTANDARD1_5, NETSTANDARD1_6, NETSTANDARD2_0, NETSTANDARD2_1
.NET Core.NET Core NETCOREAPP, NETCOREAPP1_0, NETCOREAPP1_1, NETCOREAPP2_0, NETCOREAPP2_1, NETCOREAPP2_2, NETCOREAPP3_0, NETCOREAPP3_1NETCOREAPP, NETCOREAPP1_0, NETCOREAPP1_1, NETCOREAPP2_0, NETCOREAPP2_1, NETCOREAPP2_2, NETCOREAPP3_0, NETCOREAPP3_1

Przestarzałe struktury doceloweDeprecated target frameworks

Następujące struktury docelowe są przestarzałe.The following target frameworks are deprecated. Pakiety przeznaczone dla tych platform docelowych powinny zostać poddane migracji do wskazanych zamienników.Packages targeting these target frameworks should migrate to the indicated replacements.

Przestarzałe TFMDeprecated TFM Funkcja zastępującaReplacement
aspnet50aspnet50
aspnetcore50aspnetcore50
dnxcore50dnxcore50
Dnxdnx
dnx45dnx45
dnx451dnx451
dnx452dnx452
netcoreapp ( netcoreapp )netcoreapp
dotnetdotnet
dotnet50dotnet50
dotnet51dotnet51
dotnet52dotnet52
dotnet53dotnet53
dotnet54dotnet54
dotnet55dotnet55
dotnet56dotnet56
standard nettonetstandard
netcore50netcore50 Uap10.0uap10.0
Wygraćwin netcore45netcore45
win8win8 netcore45netcore45
win81win81 netcore451netcore451
win10win10 Uap10.0uap10.0
Winrtwinrt netcore45netcore45

Zobacz teżSee also