Framework di destinazione nei progetti in stile SDKTarget frameworks in SDK-style projectsTarget frameworks in SDK-style projects

Quando si specifica come destinazione un framework in un'app o in una libreria, si specifica il set di API da rendere disponibile all'app o alla libreria.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. Per specificare il framework di destinazione nel file di progetto, usare i moniker framework di destinazione.You specify the target framework in your project file using Target Framework Monikers (TFMs).

Un'app o una libreria può specificare come destinazione una versione di .NET Standard.An app or library can target a version of .NET Standard. Le versioni di .NET Standard rappresentano set standardizzati di API in tutte le implementazioni di .NET..NET Standard versions represent standardized sets of APIs across all .NET implementations. Una libreria, ad esempio, può specificare come destinazione .NET Standard 1.6 e ottenere l'accesso ad API che possono essere usate in .NET Core e .NET Framework tramite la stessa codebase.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.

Un'app o una libreria può anche indicare come destinazione un'implementazione specifica di .NET per ottenere l'accesso ad API specifiche dell'implementazione.An app or library can also target a specific .NET implementation to gain access to implementation-specific APIs. Ad esempio, un'app che specifica come destinazione Xamarin.iOS (come Xamarin.iOS10) ottiene l'accesso ai wrapper di API iOS forniti da Xamarin per iOS 10 oppure un'app che specifica come destinazione la piattaforma UWP (UWP, uap10.0) ottiene l'accesso alle API che consentono la compilazione per dispositivi che eseguono 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.

Per alcuni framework di destinazione, ad esempio .NET Framework, le API vengono definite dagli assembly installati dal framework in un sistema e potrebbero includere API del framework applicazione, ad esempio, 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).

Per i framework di destinazione basati su pacchetti, ad esempio .NET Standard e .NET Core, le API vengono definite dai pacchetti inclusi nell'app o nella libreria.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. Un metapacchetto è un pacchetto di NuGet che non ha alcun contenuto proprio ma è costituito da un elenco di dipendenze (altri pacchetti).A metapackage is a NuGet package that has no content of its own but is a list of dependencies (other packages). Un framework di destinazione basato su pacchetti NuGet specifica in modo implicito un metapacchetto che fa riferimento a tutti i pacchetti che costituiscono complessivamente il framework.A NuGet package-based target framework implicitly specifies a metapackage that references all the packages that together make up the framework.

Versioni più recenti dei framework di destinazioneLatest target framework versions

La tabella seguente definisce i framework di destinazione più comuni, il modo in cui vengono creati i relativi riferimenti e le versioni .NET Standard implementate da tali pacchetti.The following table defines the most common target frameworks, how they're referenced, and which version of the .NET Standard they implement. Queste versioni di framework di destinazione sono le versioni stabili più recenti.These target framework versions are the latest stable versions. Non sono visualizzate le versioni non definitive.Pre-release versions aren't shown. Un moniker framework di destinazione è un formato di token standardizzato per specificare il framework di destinazione di un'app o di una libreria .NET.A Target Framework Moniker (TFM) is a standardized token format for specifying the target framework of a .NET app or library.

Framework di destinazioneTarget Framework Ultima versioneLatest
Versione stabileStable Version
Moniker della versione di .NET Framework di destinazione (TFM, Target Framework Moniker)Target Framework Moniker (TFM) ImplementatoImplemented
Versione standard di .NET.NET Standard Version
.NET Standard.NET Standard 2.12.1 netstandard2.1netstandard2.1 N/DN/A
.NET Core.NET Core 3.13.1 netcoreapp3.1netcoreapp3.1 2.12.1
.NET Framework.NET Framework 4.84.8 net48net48 2.02.0

Versioni supportate dei framework di destinazioneSupported target framework versions

Un framework di destinazione viene in genere specificato come riferimento da un moniker framework di destinazione.A target framework is typically referenced by a TFM. La tabella seguente mostra i framework di destinazione supportati da .NET Core SDK e dal client NuGet.The following table shows the target frameworks supported by the .NET Core SDK and the NuGet client. Gli equivalenti sono visualizzati tra parentesi quadre.Equivalents are shown within brackets. Ad esempio, win81 è un moniker framework di destinazione equivalente a netcore451.For example, win81 is an equivalent TFM to netcore451.

Framework di destinazioneTarget Framework Moniker framework di destinazioneTFM
.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
netstandard2.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 net11net11
net20net20
net35net35
net40net40
net403net403
net45net45
net451net451
net452net452
net46net46
net461net461
net462net462
net47net47
net471net471
net472net472
net48net48
Windows StoreWindows 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
Piattaforma UWP (Universal Windows Platform)Universal Windows Platform uap [uap10.0]uap [uap10.0]
uap10.0 [win10] [netcore50]uap10.0 [win10] [netcore50]

Come specificare framework di destinazioneHow to specify target frameworks

I framework di destinazione sono specificati nel file di progetto.Target frameworks are specified in your project file. Quando viene specificato un singolo framework di destinazione, usare l'elemento TargetFramework.When a single target framework is specified, use the TargetFramework element. Il file di progetto dell'app console seguente illustra come scegliere come destinazione .NET Core 3.0 come destinazione:The following console app project file demonstrates how to target .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>

Quando si specificano più framework di destinazione, è possibile fare riferimento in modo condizionale agli assembly per ogni framework di destinazione.When you specify multiple target frameworks, you may conditionally reference assemblies for each target framework. Nel codice è possibile eseguire in modo condizionale la compilazione con tali assembly usando i simboli del preprocessore con logica if-then-else.In your code, you can conditionally compile against those assemblies by using preprocessor symbols with if-then-else logic.

Il file di progetto della libreria seguente specifica come destinazione le API di .NET Standard (netstandard1.4) e le API di .NET Framework (net40 e net45).The following library project file targets APIs of .NET Standard (netstandard1.4) and APIs of the .NET Framework (net40 and net45). Usare l'elemento TargetFrameworks plurale con più framework di destinazione.Use the plural TargetFrameworks element with multiple target frameworks. Si noti che gli attributi Condition includono pacchetti specifici dell'implementazione quando la libreria viene compilata per i due moniker framework di destinazione di .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>

Nella libreria o nell'app scrivere codice condizionale per la compilazione per ogni framework di destinazione: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
    }
}

Il sistema di compilazione è a conoscenza dei simboli del preprocessore che rappresentano i framework di destinazione mostrati nella tabella Versioni del framework di destinazione supportate quando si usano progetti di tipo 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. Quando si usa un simbolo che rappresenta un moniker framework di destinazione di .NET Standard o .NET Core, sostituire il punto con un carattere di sottolineatura e sostituire le lettere minuscole con lettere maiuscole, ad esempio il simbolo per 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).

L'elenco completo di simboli del preprocessore per il framework di destinazione di .NET Core è:The complete list of preprocessor symbols for .NET Core target frameworks is:

Framework di destinazioneTarget Frameworks SymbolsSymbols
.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

Framework di destinazione deprecatiDeprecated target frameworks

I framework di destinazione seguenti sono deprecati.The following target frameworks are deprecated. I pacchetti che hanno come destinazione questi framework di destinazione devono essere migrati alle sostituzioni indicate.Packages targeting these target frameworks should migrate to the indicated replacements.

Moniker framework di destinazione deprecatiDeprecated TFM SostituzioneReplacement
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

Vedere ancheSee also