.NET Standard.NET Standard

.NET Standard est une spécification officielle des API .NET qui sont destinées à être disponibles sur toutes les implémentations de .NET.The .NET Standard is a formal specification of .NET APIs that are intended to be available on all .NET implementations. L’objectif de .NET Standard est d’établir une meilleure uniformité dans l’écosystème .NET.The motivation behind the .NET Standard is establishing greater uniformity in the .NET ecosystem. ECMA 335 continue d’établir l’uniformité du comportement des implémentations de .NET, mais il n’existe pas de spécification similaire pour les bibliothèques de classes de base .NET pour les implémentations des bibliothèques .NET.ECMA 335 continues to establish uniformity for .NET implementation behavior, but there's no similar spec for the .NET Base Class Libraries (BCL) for .NET library implementations.

.NET Standard permet les scénarios clés suivants :The .NET Standard enables the following key scenarios:

  • Définit un ensemble uniforme d’API de bibliothèque de classes de base pour toutes les implémentations de .NET à implémenter, indépendamment de la charge de travail.Defines uniform set of BCL APIs for all .NET implementations to implement, independent of workload.
  • Permet aux développeurs de générer des bibliothèques portables utilisables sur toutes les implémentations de .NET, à l’aide de ce même ensemble d’API.Enables developers to produce portable libraries that are usable across .NET implementations, using this same set of APIs.
  • Réduit ou même élimine une compilation conditionnelle de source partagée résultant des API .NET, uniquement pour les API de système d’exploitation.Reduces or even eliminates conditional compilation of shared source due to .NET APIs, only for OS APIs.

Les différentes implémentations de .NET ciblent des versions spécifiques de .NET Standard.The various .NET implementations target specific versions of .NET Standard. Chaque version de l’implémentation de .NET publie la version la plus récente de .NET Standard qu’elle prend en charge, une instruction qui signifie qu’elle prend également en charge les versions précédentes.Each .NET implementation version advertises the highest .NET Standard version it supports, a statement that means it also supports previous versions. Par exemple, le .NET Framework 4.6 implémente .NET Standard 1.3, ce qui signifie qu’il expose toutes les API définies dans les versions 1.0 à 1.3 de .NET Standard.For example, the .NET Framework 4.6 implements .NET Standard 1.3, which means that it exposes all APIs defined in .NET Standard versions 1.0 through 1.3. De même, .NET Framework 4.6.1 implémente .NET Standard 1.4, tandis que .NET Core 1.0 implémente .NET Standard 1.6.Similarly, the .NET Framework 4.6.1 implements .NET Standard 1.4, while .NET Core 1.0 implements .NET Standard 1.6.

Prise en charge des implémentations de .NET.NET implementation support

Le tableau suivant liste les versions minimales des plateformes qui prennent en charge chaque version de .NET Standard.The following table lists the minimum platform versions that support each .NET Standard version.

.NET Standard.NET Standard 1.01.0 1.11.1 1.21.2 1.31.3 1.41.4 1.51.5 1.61.6 2.02.0
.NET Core.NET Core 1.01.0 1.01.0 1.01.0 1.01.0 1.01.0 1.01.0 1.01.0 2.02.0
.NET Framework 1.NET Framework 1 4.54.5 4.54.5 4.5.14.5.1 4.64.6 4.6.14.6.1 4.6.14.6.1 4.6.14.6.1 4.6.14.6.1
MonoMono 4.64.6 4.64.6 4.64.6 4.64.6 4.64.6 4.64.6 4.64.6 5,45.4
Xamarin.iOSXamarin.iOS 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.1410.14
Xamarin.MacXamarin.Mac 3.03.0 3.03.0 3.03.0 3.03.0 3.03.0 3.03.0 3.03.0 3.83.8
Xamarin.AndroidXamarin.Android 7.07.0 7.07.0 7.07.0 7.07.0 7.07.0 7.07.0 7.07.0 8.08.0
Plateforme Windows universelleUniversal Windows Platform 10.010.0 10.010.0 10.010.0 10.010.0 10.010.0 10.0.1629910.0.16299 10.0.1629910.0.16299 10.0.1629910.0.16299
WindowsWindows 8.08.0 8.08.0 8.18.1
Windows PhoneWindows Phone 8.18.1 8.18.1 8.18.1
Windows Phone SilverlightWindows Phone Silverlight 8.08.0

1. Les versions listées pour le .NET Framework s’appliquent au kit SDK .NET Core 2.0 et ultérieur des outils. Les versions antérieures utilisent un autre mappage pour .NET Standard 1.5 et versions ultérieures. Vous pouvez télécharger les outils pour Outils .NET Core pour Visual Studio 2015 si vous ne pouvez pas mettre à niveau vers Visual Studio 2017.1 The versions listed for .NET Framework apply to .NET Core SDK 2.0 and later versions of the tooling. Older versions used a different mapping for .NET Standard 1.5 and higher. You can download tooling for .NET Core tools for Visual Studio 2015 if you cannot upgrade to Visual Studio 2017.

  • Les colonnes représentent les versions de .NET Standard.The columns represent .NET Standard versions. Chaque cellule d’en-tête est un lien vers un document qui indique les API ajoutées à cette version de .NET Standard.Each header cell is a link to a document that shows which APIs got added in that version of .NET Standard.
  • Les lignes représentent les différentes implémentations .NET.The rows represent the different .NET implementations.
  • Le numéro de version dans chaque cellule indique la version minimale de l’implémentation nécessaire pour cibler cette version de .NET Standard.The version number in each cell indicates the minimum version of the implementation you'll need in order to target that .NET Standard version.
  • Pour un tableau interactif, consultez Versions .NET Standard.For an interactive table, see .NET Standard versions.

Pour trouver la version la plus élevée de .NET Standard que vous pouvez cibler, procédez comme suit :To find the highest version of .NET Standard that you can target, do the following steps:

  1. Recherchez la ligne indiquant l’implémentation de .NET sur laquelle vous voulez exécuter.Find the row that indicates the .NET implementation you want to run on.
  2. Recherchez la colonne de cette ligne qui indique votre version, en allant de droite à gauche.Find the column in that row that indicates your version starting from right to left.
  3. L’en-tête de colonne indique la version de .NET Standard prise en charge par votre cible (et les versions inférieures de .NET Standard qu’elle prend également en charge).The column header indicates the .NET Standard version that your target supports (and any lower .NET Standard versions will also support it).
  4. Répétez ce processus pour chaque plateforme que vous voulez cibler.Repeat this process for each platform you want to target. Si vous avez plusieurs plateformes cibles, vous devez choisir la version la moins élevée parmi elles.If you have more than one target platform, you should pick the smaller version among them. Par exemple, si vous voulez exécuter sur le .NET Framework 4.5 et .NET Core 1.0, la version .NET Standard le plus élevée que vous pouvez utiliser est .NET Standard 1.1.For example, if you want to run on .NET Framework 4.5 and .NET Core 1.0, the highest .NET Standard version you can use is .NET Standard 1.1.

Version de .NET Standard à ciblerWhich .NET Standard version to target

Lors du choix d’une version de .NET Standard, vous devez envisager ce compromis :When choosing a .NET Standard version, you should consider this trade-off:

  • Plus la version est élevée, plus nombreuses sont les API disponibles.The higher the version, the more APIs are available to you.
  • Moins la version est élevée, plus nombreuses sont les plateformes qui l’implémentent.The lower the version, the more platforms implement it.

D’une façon générale, nous vous recommandons de cibler la version la moins élevée possible de .NET Standard.In general, we recommend you to target the lowest version of .NET Standard possible. Par conséquent, après avoir trouvé la version de .NET Standard la plus élevée que vous pouvez cibler, procédez comme suit :So, after you find the highest .NET Standard version you can target, follow these steps:

  1. Ciblez la version moins élevée suivante de .NET Standard et générez votre projet.Target the next lower version of .NET Standard and build your project.
  2. Si votre projet est généré correctement, répétez l’étape 1.If your project builds successfully, repeat step 1. Dans le cas contraire, reciblez-le sur la version plus élevée suivante : c’est cette version que vous devez utiliser.Otherwise, retarget to the next higher version and that's the version you should use.

Le ciblage de versions inférieures de .NET Standard génère cependant un certain nombre de dépendances de support.However, targeting lower .NET Standard versions introduces a number of support dependencies. Si votre projet cible .NET Standard 1.x, nous vous recommandons de cibler également .NET Standard 2.0.If your project targets .NET Standard 1.x, we recommend that you also target .NET Standard 2.0. Ceci simplifie le graphique de dépendance pour les utilisateurs de votre bibliothèque qui exécutent des infrastructures compatibles .NET Standard 2.0 et réduit le nombre de packages qu’ils doivent télécharger.This simplifies the dependency graph for users of your library that run on .NET Standard 2.0 compatible frameworks, and it reduces the number of packages they need to download.

Règles de contrôle de version de .NET standard.NET Standard versioning rules

Il existe deux règles principales de contrôle de version :There are two primary versioning rules:

  • Additive : les versions de .NET Standard sont des cercles logiquement concentriques : les versions plus élevées intègrent toutes les API des versions précédentes.Additive: .NET Standard versions are logically concentric circles: higher versions incorporate all APIs from previous versions. Il n’y a pas de ruptures entre les versions.There are no breaking changes between versions.
  • Immuable : une fois livrées, les versions de .NET Standard sont figées.Immutable: Once shipped, .NET Standard versions are frozen. Les nouvelles API sont disponibles d’abord dans les implémentations de .NET spécifiques, comme .NET Core.New APIs first become available in specific .NET implementations, such as .NET Core. Si le comité de révision de .NET Standard estime que les nouvelles API doivent être disponibles pour les implémentations de .NET, elles sont ajoutées dans une nouvelle version de .NET Standard.If the .NET Standard review board believes the new APIs should be available for all .NET implementations, they're added in a new .NET Standard version.

SpécificationSpecification

La spécification de .NET Standard est un ensemble d’API normalisé.The .NET Standard specification is a standardized set of APIs. La spécification est gérée par les entités chargées de l’implémentation de .NET, en particulier Microsoft (inclut .NET Framework, .NET Core et Mono) et Unity.The specification is maintained by .NET implementors, specifically Microsoft (includes .NET Framework, .NET Core, and Mono) and Unity. Un processus de commentaires publics est utilisé dans le cadre de l’établissement des nouvelles versions de .NET Standard via GitHub.A public feedback process is used as part of establishing new .NET Standard versions through GitHub.

Artefacts officielsOfficial artifacts

La spécification officielle est un ensemble de fichiers .cs qui définissent les API qui font partie de la norme.The official specification is a set of .cs files that define the APIs that are part of the standard. Le répertoire ref dans le dépôt dotnet/standard définit les API .NET Standard.The ref directory in the dotnet/standard repository defines the .NET Standard APIs.

Le métapackage NETStandard.Library (source) décrit l’ensemble des bibliothèques qui définissent (en partie) une ou plusieurs versions de .NET Standard.The NETStandard.Library metapackage (source) describes the set of libraries that define (in part) one or more .NET Standard versions.

Un composant donné, comme System.Runtime, décrit :A given component, like System.Runtime, describes:

  • Une partie de .NET Standard (seulement son étendue).Part of .NET Standard (just its scope).
  • Plusieurs versions de .NET Standard, pour cette étendue.Multiple versions of .NET Standard, for that scope.

Des artefacts dérivés sont fournis pour une lecture plus pratique et pour activer certains scénarios de développement (par exemple, utilisation d’un compilateur).Derivative artifacts are provided to enable more convenient reading and to enable certain developer scenarios (for example, using a compiler).

Représentation des packagesPackage representation

Les assemblys de référence de .NET Standard sont distribués principalement via les packages NuGet.The primary distribution vehicle for the .NET Standard reference assemblies is NuGet packages. Les implémentations sont fournies de façons différentes, en fonction de l’implémentation de .NET.Implementations are delivered in a variety of ways, appropriate for each .NET implementation.

Les packages NuGet ciblent un ou plusieurs frameworks.NuGet packages target one or more frameworks. Les packages .NET Standard ciblent le framework «.NET Standard ».The .NET Standard packages target the ".NET Standard" framework. Vous pouvez cibler le .NET Framework Standard avec le Moniker de framework cible compact netstandard (par exemple netstandard1.4).You can target the .NET Standard framework using the netstandard compact TFM (for example, netstandard1.4). Les bibliothèques destinées à s’exécuter sur plusieurs runtimes doivent cibler ce framework.Libraries that are intended to run on multiple runtimes should target this framework. Pour l’ensemble d’API le plus large, ciblez netstandard2.0, car le nombre d’API disponibles a plus que doublé entre .NET Standard 1.6 et 2.0.For the broadest set of APIs, target netstandard2.0 since the number of available APIs more than doubled between .NET Standard 1.6 and 2.0.

Le métapackage NETStandard.Library référence l’ensemble complet des packages NuGet qui définissent .NET Standard.The NETStandard.Library metapackage references the complete set of NuGet packages that define .NET Standard. La méthode la plus courante pour cibler netstandard consiste à référencer ce métapackage.The most common way to target netstandard is by referencing this metapackage. Il décrit et donne accès à la quarantaine de bibliothèques .NET et les API associées qui définissent .NET Standard.It describes and provides access to the ~40 .NET libraries and associated APIs that define .NET Standard. Vous pouvez référencer d’autres packages qui ciblent netstandard pour avoir accès à d’autres API.You can reference additional packages that target netstandard to get access to additional APIs.

Gestion de versionVersioning

La spécification n’est pas singulière, mais représente un ensemble d’API dont la croissance est incrémentielle et les versions linéaires.The specification is not singular, but an incrementally growing and linearly versioned set of APIs. La première version de la norme établit un ensemble d’API de référence.The first version of the standard establishes a baseline set of APIs. Les versions ultérieures ajoutent des API et héritent des API définies par les versions précédentes.Subsequent versions add APIs and inherit APIs defined by previous versions. Il n’existe aucune disposition établie pour supprimer des API de la norme.There is no established provision for removing APIs from the standard.

.NET Standard n’est spécifique à aucune implémentation de .NET et ne correspond pas au schéma de contrôle de version de ces runtimes..NET Standard is not specific to any one .NET implementation, nor does it match the versioning scheme of any of those runtimes.

Les API ajoutées à une implémentation (par exemple, .NET Framework, .NET Core et Mono) peuvent être considérées comme des candidats à ajouter à la spécification, en particulier si elles sont jugées fondamentales.APIs added to any of the implementations (such as, .NET Framework, .NET Core and Mono) can be considered as candidates to add to the specification, particularly if they are thought to be fundamental in nature. Des versions de .NET Standard sont créées en fonction des versions Release des implémentations de .NET, ce qui vous permet de cibler les nouvelles API à partir d’une bibliothèque de classes portable .NET Standard.New versions of .NET Standard are created based on .NET implementation releases, enabling you to target new APIs from a .NET Standard PCL. Les mécanismes du contrôle de version sont décrits plus en détail dans Gestion de version .NET Core.The versioning mechanics are described in more detail in .NET Core Versioning.

Le contrôle de version de .NET Standard est important pour son utilisation..NET Standard versioning is important for usage. Pour une version donnée de .NET Standard, vous pouvez utiliser des bibliothèques qui ciblent cette même version ou une version moins élevée.Given a .NET Standard version, you can use libraries that target that same or lower version. L’approche suivante décrit le flux de travail de l’utilisation des bibliothèques de classes portables .NET Standard, propre au ciblage de .NET Standard.The following approach describes the workflow for using .NET Standard PCLs, specific to .NET Standard targeting.

  • Sélectionnez une version de .NET Standard à utiliser pour votre bibliothèque de classes portable.Select a .NET Standard version to use for your PCL.
  • Utilisez des bibliothèques qui dépendent de la même version de .NET Standard ou d’une version inférieure.Use libraries that depend on the same .NET Standard version or lower.
  • Si vous trouvez une bibliothèque qui dépend d’une version plus élevée de .NET Standard, vous devez adopter cette même version ou décider de ne pas utiliser cette bibliothèque.If you find a library that depends on a higher .NET Standard version, you either need to adopt that same version or decide not to use that library.

Ciblage de .NET StandardTargeting .NET Standard

Vous pouvez créer des bibliothèques .NET Standard en combinant le framework netstandard et le métapackage NETStandard.Library.You can build .NET Standard Libraries using a combination of the netstandard framework and the NETStandard.Library metapackage. Vous pouvez voir des exemples de ciblage de .NET Standard avec les outils .NET Core.You can see examples of targeting the .NET Standard with .NET Core tools.

Mode de compatibilité du .NET Framework.NET Framework compatibility mode

Le mode de compatibilité du .NET Framework a été introduit dans .NET Standard 2.0.Starting with .NET Standard 2.0, the .NET Framework compatibility mode was introduced. Ce mode de compatibilité permet aux projets .NET Standard de référencer des bibliothèques .NET Framework comme si elles étaient compilées pour .NET Standard.This compatibility mode allows .NET Standard projects to reference .NET Framework libraries as if they were compiled for .NET Standard. Le référencement de bibliothèques .NET Framework ne fonctionne pas pour tous les projets, par exemple pour les bibliothèques qui utilisent des API WPF (Windows Presentation Foundation).Referencing .NET Framework libraries doesn't work for all projects, such as libraries that use Windows Presentation Foundation (WPF) APIs.

Pour plus d’informations, consultez Mode de compatibilité du .NET Framework.For more information, see .NET Framework compatibility mode.

Bibliothèques .NET Standard et Visual Studio.NET Standard libraries and Visual Studio

Pour générer des bibliothèques .NET Standard dans Visual Studio, vérifiez que Visual Studio 2017 version 15.3 ou ultérieur est installé sur Windows, ou que Visual Studio pour Mac version 7.1 ou ultérieur est installé sur macOS.In order to build .NET Standard libraries in Visual Studio, make sure you have Visual Studio 2017 version 15.3 or later installed on Windows, or Visual Studio for Mac version 7.1 or later installed on macOS.

Si vous devez seulement utiliser les bibliothèques .NET Standard 2.0 dans vos projets, vous pouvez également le faire dans Visual Studio 2015.If you only need to consume .NET Standard 2.0 libraries in your projects, you can also do that in Visual Studio 2015. Cependant, le client NuGet 3.6 ou ultérieur doit être installé.However, you need NuGet client 3.6 or higher installed. Vous pouvez télécharger le client NuGet pour Visual Studio 2015 à partir de la page Téléchargements NuGet.You can download the NuGet client for Visual Studio 2015 from the NuGet downloads page.

Comparaison avec les bibliothèques de classes portablesComparison to Portable Class Libraries

.NET Standard remplace les bibliothèques de classes portables..NET Standard is the replacement for Portable Class Libraries (PCL). .NET Standard améliore l’expérience de création des bibliothèques portables en organisant une bibliothèque de classes de base, établissant ainsi une meilleure uniformité entre les implémentations de .NET.The .NET Standard improves on the experience of creating portable libraries by curating a standard BCL and establishing greater uniformity across .NET implementations as a result. Une bibliothèque qui cible .NET Standard est une bibliothèque de classes portable ou une « bibliothèque de classes portable .NET Standard ».A library that targets .NET Standard is a PCL or a ".NET Standard-based PCL". Les bibliothèques de classes portables existantes sont basées sur un profil.Existing PCLs are "profile-based PCLs".

.NET Standard et les profils de bibliothèque de classes portable ont été créés pour des raisons similaires, mais diffèrent de façon significative..NET Standard and PCL profiles were created for similar purposes but also differ in key ways.

Points communs :Similarities:

  • Définit les API qui peuvent être utilisées pour le partage de code binaire.Define APIs that can be used for binary code sharing.

Différences :Differences:

  • .NET Standard est un ensemble organisé d’API, tandis que les profils de bibliothèque de classes portable sont définis par des intersections de plateformes existantes..NET Standard is a curated set of APIs, while PCL profiles are defined by intersections of existing platforms.
  • .NET Standard a des versions linéaires, contrairement aux profils de bibliothèque de classes portable..NET Standard linearly versions, while PCL profiles do not.
  • Les profils de bibliothèque de classes portable représentent les plateformes Microsoft, alors que .NET Standard est indépendant de la plateforme.PCL profiles represents Microsoft platforms while the .NET Standard is platform-agnostic.

Compatibilité des bibliothèques de classes portablesPCL compatibility

.NET Standard est compatible avec un sous-ensemble de profils de bibliothèque de classes portable..NET Standard is compatible with a subset of PCL profiles. Les versions 1.0, 1.1 et 1.2 de .NET Standard se recouvrent chacune avec un ensemble de profils de bibliothèque de classes portable..NET Standard 1.0, 1.1 and 1.2 each overlap with a set of PCL profiles. Ce chevauchement a été créé pour deux raisons :This overlap was created for two reasons:

  • Permettre aux bibliothèques de classes portables .NET Standard de référencer les bibliothèques de classes portables basées sur un profil.Enable .NET Standard-based PCLs to reference profile-based PCLs.
  • Permettre aux bibliothèques de classes portables basées sur un profil d’être packagées comme des bibliothèques de classes portables .NET Standard.Enable profile-based PCLs to be packaged as .NET Standard-based PCLs.

La compatibilité des bibliothèques de classes portables est fournie par le package NuGet Microsoft.NETCore.Portable.Compatibility.Profile-based PCL compatibility is provided by the Microsoft.NETCore.Portable.Compatibility NuGet package. Cette dépendance est nécessaire quand vous référencez des packages NuGet qui contiennent des bibliothèques de classes portables basées sur un profil.This dependency is required when referencing NuGet packages that contain profile-based PCLs.

Les bibliothèques de classes portables basées sur un profil packagées en netstandard sont plus faciles à utiliser que les bibliothèques de classes portables basées sur un profil packagées de manière habituelle.Profile-based PCLs packaged as netstandard are easier to consume than typically packaged profile-based PCLs. Les packages netstandard sont compatibles avec les utilisateurs existants.netstandard packaging is compatible with existing users.

Voici l’ensemble des profils de bibliothèques de classes portables qui sont compatibles avec .NET Standard :You can see the set of PCL profiles that are compatible with the .NET Standard:

Profil de bibliothèque de classes portablePCL Profile .NET Standard.NET Standard Plateformes de bibliothèque de classes portablePCL Platforms
Profile7Profile7 1.11.1 .NET Framework 4.5, Windows 8.NET Framework 4.5, Windows 8
Profile31Profile31 1.01.0 Windows 8.1, Windows Phone Silverlight 8.1Windows 8.1, Windows Phone Silverlight 8.1
Profile32Profile32 1.21.2 Windows 8.1, Windows Phone 8.1Windows 8.1, Windows Phone 8.1
Profile44Profile44 1.21.2 .NET Framework 4.5.1, Windows 8.1.NET Framework 4.5.1, Windows 8.1
Profile49Profile49 1.01.0 .NET Framework 4.5, Windows Phone Silverlight 8.NET Framework 4.5, Windows Phone Silverlight 8
Profile78Profile78 1.01.0 .NET Framework 4.5, Windows 8, Windows Phone Silverlight 8.NET Framework 4.5, Windows 8, Windows Phone Silverlight 8
Profile84Profile84 1.01.0 Windows Phone 8.1, Windows Phone Silverlight 8.1Windows Phone 8.1, Windows Phone Silverlight 8.1
Profile111Profile111 1.11.1 .NET Framework 4.5, Windows 8, Windows Phone 8.1.NET Framework 4.5, Windows 8, Windows Phone 8.1
Profile151Profile151 1.21.2 .NET Framework 4.5.1, Windows 8.1, Windows Phone 8.1.NET Framework 4.5.1, Windows 8.1, Windows Phone 8.1
Profile157Profile157 1.01.0 Windows 8.1, Windows Phone 8.1, Windows Phone Silverlight 8.1Windows 8.1, Windows Phone 8.1, Windows Phone Silverlight 8.1
Profile259Profile259 1.01.0 .NET Framework 4.5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8.NET Framework 4.5, Windows 8, Windows Phone 8.1, Windows Phone Silverlight 8

Voir aussiSee also