Versions cibles de .NET FrameworkTarget frameworks

Quand vous ciblez un framework dans une application ou une bibliothèque, vous spécifiez l’ensemble d’API que vous souhaitez rendre accessibles à l’application ou à la bibliothèque.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. Vous spécifiez le framework cible dans votre fichier projet à l’aide des monikers du framework cible (TFM).You specify the target framework in your project file using Target Framework Monikers (TFMs).

Une application ou une bibliothèque peut cibler une version de .NET Standard.An app or library can target a version of .NET Standard. Les versions .NET Standard représentent des ensembles d’API standard sur toutes les implémentations de .NET..NET Standard versions represent standardized sets of APIs across all .NET implementations. Par exemple, une bibliothèque peut cibler .NET Standard 1.6 et accéder aux API qui fonctionnent sur .NET Core et .NET Framework en utilisant la même base de code.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.

Une application ou une bibliothèque peut également cibler une implémentation spécifique de .NET pour accéder aux API spécifiques à l’implémentation.An app or library can also target a specific .NET implementation to gain access to implementation-specific APIs. Ainsi, une application qui cible Xamarin.iOS (par exemple, Xamarin.iOS10) accède à des wrappers d’API iOS fournis par Xamarin pour iOS 10, ou une application qui cible la plateforme Windows universelle (UWP, uap10.0) a accès aux API de compilation pour les appareils qui exécutent 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.

Pour certains frameworks cibles (par exemple, .NET Framework), les API sont définies par les assemblys que le framework installe sur un système et peuvent inclure des API de framework d’application (par exemple, 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).

Pour les frameworks cibles basés sur le package (par exemple, .NET Standard et .NET Core), les API sont définies par les packages inclus dans l’application ou la bibliothèque.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 métapackage est un package NuGet qui n’a aucun contenu propre, mais qui est une liste de dépendances (autres packages).A metapackage is a NuGet package that has no content of its own but is a list of dependencies (other packages). Un framework cible basé sur un package NuGet spécifie implicitement un métapackage qui référence tous les packages constituant le framework.A NuGet package-based target framework implicitly specifies a metapackage that references all the packages that together make up the framework.

Versions les plus récentes des frameworks ciblesLatest target framework versions

Le tableau ci-dessous définit les frameworks cibles les plus courants, la façon dont ils sont référencés et la version de .NET Standard qu’ils implémentent.The following table defines the most common target frameworks, how they're referenced, and which version of the .NET Standard they implement. Ces versions de framework cible sont les dernières versions stables.These target framework versions are the latest stable versions. Les préversions ne sont pas mentionnées.Pre-release versions aren't shown. Un moniker du framework cible est un format de jeton standardisé pour la spécification du framework cible d’une bibliothèque ou d’une application .NET.A Target Framework Moniker (TFM) is a standardized token format for specifying the target framework of a .NET app or library.

Framework cibleTarget Framework DernièreLatest
Version stableStable Version
Moniker du Framework cibleTarget Framework Moniker (TFM) ImplémentéImplemented
Version .NET Standard.NET Standard Version
.NET Standard.NET Standard 2.02.0 netstandard2.0netstandard2.0 N/AN/A
.NET Core.NET Core 2.12.1 netcoreapp2.1netcoreapp2.1 2.02.0
.NET Framework.NET Framework 4.7.24.7.2 net472net472 2.02.0

Versions de framework cible prises en chargeSupported target framework versions

Un framework cible est généralement référencé par un TFM.A target framework is typically referenced by a TFM. Le tableau suivant présente les frameworks cibles pris en charge par le SDK .NET Core et le client NuGet.The following table shows the target frameworks supported by the .NET Core SDK and the NuGet client. Les équivalents sont indiqués entre crochets.Equivalents are shown within brackets. Par exemple, win81 est un TFM équivalent de netcore451.For example, win81 is an equivalent TFM to netcore451.

Framework cibleTarget 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
.NET Framework.NET Framework net11net11
net20net20
net35net35
net40net40
net403net403
net45net45
net451net451
net452net452
net46net46
net461net461
net462net462
net47net47
net471net471
net472net472
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
Plateforme Windows universelleUniversal Windows Platform uap [uap10.0]uap [uap10.0]
uap10.0 [win10] [netcore50]uap10.0 [win10] [netcore50]

Comment spécifier des frameworks ciblesHow to specify target frameworks

Les frameworks cibles sont spécifiés dans votre fichier projet.Target frameworks are specified in your project file. Quand vous spécifiez un framework cible unique, utilisez l’élément TargetFramework.When a single target framework is specified, use the TargetFramework element. Le fichier projet d’application console suivant montre comment cibler .NET Core 2.0 :The following console app project file demonstrates how to target .NET Core 2.0:

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

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

</Project>

Quand vous spécifiez plusieurs frameworks cibles, vous pouvez référencer conditionnellement des assemblys pour chaque framework cible.When you specify multiple target frameworks, you may conditionally reference assemblies for each target framework. Dans votre code, vous pouvez effectuer une compilation conditionnelle par rapport à ces assemblys en utilisant des symboles de préprocesseur avec la structure logique if-then-else.In your code, you can conditionally compile against those assemblies by using preprocessor symbols with if-then-else logic.

Le fichier projet de bibliothèque suivant cible des API de .NET Standard (netstandard1.4) et des API de .NET Framework (net40 et net45).The following library project file targets APIs of .NET Standard (netstandard1.4) and APIs of the .NET Framework (net40 and net45). Utilisez l’élément pluriel TargetFrameworks avec plusieurs frameworks cibles.Use the plural TargetFrameworks element with multiple target frameworks. Notez la façon dont les attributs Condition incluent les packages spécifiques à l’implémentation quand la bibliothèque est compilée pour les deux 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>

Au sein de votre application ou bibliothèque, vous écrivez du code conditionnel à compiler pour chaque framework cible :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
    }
}

Le système de génération tient compte des symboles de préprocesseur qui représentent les frameworks cibles indiqués dans le tableau Versions de framework cible prises en charge.The build system is aware of preprocessor symbols representing the target frameworks shown in the Supported target framework versions table. Quand vous utilisez un symbole représentant un TFM .NET Standard ou .NET Core, remplacez le point par un trait de soulignement et remplacez les lettres minuscules par des lettres majuscules (par exemple, le symbole pour netstandard1.4 est 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).

La liste complète des symboles de préprocesseur pour les frameworks cibles de .NET Core est la suivante :The complete list of preprocessor symbols for .NET Core target frameworks is:

Versions cibles de .NET FrameworkTarget Frameworks SymbolesSymbols
.NET Framework.NET Framework NET20, NET35, NET40, NET45, NET451, NET452, NET46, NET461, NET462, NET47, NET471, NET472NET20, NET35, NET40, NET45, NET451, NET452, NET46, NET461, NET462, NET47, NET471, NET472
.NET Standard.NET Standard NETSTANDARD1_0, NETSTANDARD1_1, NETSTANDARD1_2, NETSTANDARD1_3, NETSTANDARD1_4, NETSTANDARD1_5, NETSTANDARD1_6, NETSTANDARD2_0NETSTANDARD1_0, NETSTANDARD1_1, NETSTANDARD1_2, NETSTANDARD1_3, NETSTANDARD1_4, NETSTANDARD1_5, NETSTANDARD1_6, NETSTANDARD2_0
.NET Core.NET Core NETCOREAPP1_0, NETCOREAPP1_1, NETCOREAPP2_0, NETCOREAPP2_1NETCOREAPP1_0, NETCOREAPP1_1, NETCOREAPP2_0, NETCOREAPP2_1

Frameworks cibles dépréciésDeprecated target frameworks

Les frameworks cibles suivants sont dépréciés.The following target frameworks are deprecated. Les packages ciblant ces frameworks cibles doivent migrer vers les versions de remplacement indiquées.Packages targeting these target frameworks should migrate to the indicated replacements.

TFM dépréciéDeprecated TFM ReplacementReplacement
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

Voir aussiSee also