Frameworks cibles dans les projets de style SDK

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. Vous spécifiez la version cible de .NET Framework dans votre fichier projet à l’aide d’un moniker de Framework cible (TFM).

Une application ou une bibliothèque peut cibler une version de .NET Standard. Les versions .NET Standard représentent des ensembles d’API standard sur toutes les implémentations de .NET. 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.

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. Par exemple, une application qui cible Xamarin. iOS (par exemple, Xamarin.iOS10 ) a accès aux wrappers d’API iOS fournis par Xamarin pour iOS 10, ou une application qui cible plateforme Windows universelle (UWP uap10.0 ) a accès aux API qui se compilent pour les appareils qui exécutent Windows 10.

Pour certains frameworks cibles, tels que .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).

Pour les frameworks cibles basés sur les packages (par exemple, .NET 5, .NET Core et .NET Standard), les API sont définies par les packages NuGet inclus dans l’application ou la bibliothèque.

Dernières versions

Le tableau suivant 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. Ces versions de framework cible sont les dernières versions stables. Les préversions ne sont pas mentionnées. Un moniker de Framework cible (TFM) est un format de jeton standardisé pour la spécification de la version cible de .NET Framework d’une application ou d’une bibliothèque .NET.

Version cible de .NET Framework Latest
version stable
Moniker du Framework cible (TFM) Implémenté
Version de .NET Standard
.NET 5 5.0 .net 5.0 N/A
.NET Standard 2.1 netstandard 2.1 N/A
.NET Core 3.1 netcoreapp 3.1 2.1
.NET Framework 4.8 net48 2.0

Frameworks cibles pris en charge

Un framework cible est généralement référencé par un TFM. Le tableau suivant présente les frameworks cibles pris en charge par le kit de développement logiciel (SDK) .NET et le client NuGet. Les équivalents sont indiqués entre crochets. Par exemple, win81 est un TFM équivalent de netcore451.

Framework cible TFM
.NET 5 + (et .NET Core) netcoreapp1.0
netcoreapp1.1
netcoreapp2.0
netcoreapp2.1
netcoreapp2.2
netcoreapp 3.0
netcoreapp 3.1
.net 5.0
net 6.0
.NET Standard netstandard1.0
netstandard1.1
netstandard1.2
netstandard1.3
netstandard1.4
netstandard1.5
netstandard1.6
netstandard2.0
netstandard 2.1
.NET Framework net11
net20
net35
net40
net403
net45
net451
net452
net46
net461
net462
net47
net471
net472
net48
Windows Store netcore [netcore45]
netcore45 [win] [win8]
netcore451 [win81]
.NET Micro Framework netmf
Silverlight sl4
sl5
Windows Phone wp [wp7]
wp7
wp75
wp8
wp81
wpa81
Plateforme Windows universelle uap [uap10.0]
uap10.0 [win10] [netcore50]

* .NET 5 et versions ultérieures TFM incluent certaines variations propres au système d’exploitation. Pour plus d’informations, consultez la section suivante, .net 5 + TFM propre au système d’exploitation.

.NET 5 + TFM spécifiques au système d’exploitation

Les net5.0 net6.0 TFM et incluent des technologies qui fonctionnent sur différentes plateformes. La spécification d’un TFM spécifique au système d’exploitation rend les API spécifiques à un système d’exploitation disponibles pour votre application, par exemple, les liaisons Windows Forms ou iOS. Les TFM spécifiques du système d’exploitation héritent également de toutes les API disponibles pour leur TFM de base, par exemple, net5.0 TFM.

.NET 5 a introduit le net5.0-windows TFM spécifique au système d’exploitation, qui comprend des liaisons spécifiques à Windows pour les API WinForms, WPF et UWP. .NET 6 introduit de nouveaux TFM spécifiques au système d’exploitation.

Le tableau suivant montre la compatibilité de .NET 5 + TFM.

TFM Compatible avec
.net 5.0 net1.. 4 (avec avertissement NU1701)
netcoreapp1.. 3,1 (avertissement quand WinForms ou WPF est référencé)
netstandard1.. 2,1
.net 5.0-Windows netcoreapp1.. 3,1 (plus tout le reste hérité de net5.0 )
.net 6.0 (version ultérieure de net5.0 )
.net 6.0-Android xamarin.android (+ tout le reste hérité de net6.0 )
NET 6.0-iOS xamarin.ios (+ tout le reste hérité de net6.0 )
.net 6.0-MacOS xamarin.mac (+ tout le reste hérité de net6.0 )
NET 6.0-maccatalyst xamarin.ios (+ tout le reste hérité de net6.0 )
NET 6.0-TVos xamarin.tvos (+ tout le reste hérité de net6.0 )
.net 6.0-Windows (version ultérieure de net5.0-windows )

Pour que votre application soit portable sur différentes plateformes tout en ayant toujours accès aux API spécifiques au système d’exploitation, vous pouvez cibler plusieurs TFM spécifiques au système d’exploitation et ajouter des protecteurs de plateforme autour des appels d’API spécifiques au système d’exploitation à l’aide des #if directives de préprocesseur.

Cibles suggérées

Utilisez ces instructions pour déterminer les TFM à utiliser dans votre application :

  • Les applications portables sur plusieurs plateformes doivent cibler un TFM de base, par exemple, net5.0 . Cela comprend la plupart des bibliothèques, mais également ASP.NET Core et Entity Framework.

  • Les bibliothèques spécifiques à la plateforme doivent cibler des versions spécifiques à la plateforme. Par exemple, les projets WinForms et WPF doivent cibler net5.0-windows ou net6.0-windows .

  • Les modèles d’application multiplateforme (Xamarin Forms, ASP.NET Core) et les packs de pont (Xamarin Essentials) doivent au moins cibler le TFM de base, par exemple, net6.0 , mais peuvent également cibler des versions supplémentaires spécifiques à la plateforme pour éclairer davantage d’API ou de fonctionnalités.

Version du système d’exploitation dans TFM

Vous pouvez également spécifier une version de système d’exploitation facultative à la fin du TFM, par exemple, net6.0-ios13.0 , qui indique les API disponibles pour votre application. (Le kit de développement logiciel (SDK) .NET correspondant sera mis à jour pour inclure la prise en charge des versions plus récentes du système d’exploitation.) Pour accéder aux API récemment publiées, incrémentez la version du système d’exploitation dans le TFM. Vous pouvez toujours rendre votre application compatible avec les versions antérieures du système d’exploitation (et ajouter des protections des appels aux API de version ultérieure) en ajoutant l' SupportedOSPlatformVersion élément à votre fichier projet. L' SupportedOSPlatformVersion élément indique la version minimale du système d’exploitation requise pour exécuter votre application.

Par exemple, l’extrait de fichier de projet suivant spécifie que les API iOS 14 sont disponibles pour l’application, mais elles peuvent s’exécuter sur des ordinateurs iOS 13 ou version ultérieure.

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

  <PropertyGroup>
    <TargetFramework>net6.0-ios14.0</TargetFramework>
    <SupportedOSPlatformVersion>13.0</SupportedOSPlatformVersion> (minimum os platform version)
  </PropertyGroup>

  ...

</Project>

Comment spécifier une version cible de .NET Framework

Les frameworks cibles sont spécifiés dans un fichier projet. Quand un Framework cible unique est spécifié, utilisez l' élément TargetFramework. Le fichier de projet d’application console suivant montre comment cibler .NET 5,0 :

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

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

</Project>

Quand vous spécifiez plusieurs frameworks cibles, vous pouvez référencer conditionnellement des assemblys pour chaque framework cible. 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.

Le projet de bibliothèque suivant cible les API de .NET Standard ( netstandard1.4 ) et .NET Framework ( net40 et net45 ). Utilisez l' élément TargetFrameworks pluriel avec plusieurs frameworks cibles. Les Condition attributs incluent des packages spécifiques à l’implémentation lorsque la bibliothèque est compilée pour les deux .NET Framework TFM :

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

Dans votre bibliothèque ou votre application, vous écrivez du code conditionnel à l’aide de directives de préprocesseur à compiler pour chaque Framework cible :

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 représentant les frameworks cibles affichés dans le tableau versions de Framework cible prises en charge lorsque vous utilisez des projets de type SDK. Quand vous utilisez un symbole qui représente une .NET Standard, .NET Core ou .NET 5 TFM, remplacez les points et les traits d’Union par un trait de soulignement et remplacez les lettres minuscules par des majuscules (par exemple, le symbole de netstandard1.4 est NETSTANDARD1_4 ).

La liste complète des symboles de préprocesseur pour les frameworks cibles .NET est la suivante :

Versions cibles de .NET Framework symboles
.NET Framework NETFRAMEWORK, NET48, NET472, NET471, NET47, NET462, NET461, NET46, NET452, NET451, NET45, NET40, NET35, NET20
.NET Standard NETSTANDARD, NETSTANDARD2_1, NETSTANDARD2_0, NETSTANDARD1_6, NETSTANDARD1_5, NETSTANDARD1_4, NETSTANDARD1_3, NETSTANDARD1_2, NETSTANDARD1_1, NETSTANDARD1_0
.NET 5 + (et .NET Core) NET, NET6_0, NET6_0_ANDROID, NET6_0_IOS, NET6_0_MACOS, NET6_0_MACCATALYST, NET6_0_TVOS, NET6_0_WINDOWS, NET5_0, NETCOREAPP, NETCOREAPP3_1, NETCOREAPP3_0, NETCOREAPP2_2, NETCOREAPP2_1, NETCOREAPP2_0, NETCOREAPP1_1, NETCOREAPP1_0

Frameworks cibles dépréciés

Les frameworks cibles suivants sont dépréciés. Les packages qui ciblent ces frameworks cibles doivent migrer vers les remplacements indiqués.

TFM déprécié Remplacement
aspnet50
aspnetcore50
dnxcore50
dnx
dnx45
dnx451
dnx452
netcoreapp
dotnet
dotnet50
dotnet51
dotnet52
dotnet53
dotnet54
dotnet55
dotnet56
netstandard
netcore50 uap10.0
win netcore45
win8 netcore45
win81 netcore451
win10 uap10.0
winrt netcore45

Voir aussi