Cet article décrit les principales nouveautés de .NET Core 3.0 et 3.1.

.NET Core 3.0 :

Sortie le 24 septembre 2019

Améliorations C# du langage 8.0

C#8.0 fait également partie de cette version, qui comprend de nouvelles fonctionnalités comme les types de référence Nullable ou encore les flux asynchrones.NET Standard 2.1

.NET Core 3,0 implémente 

.NET Standard 2,1. Toutefois, il est nécessaire d’effectuer quelques réglages préliminaires au niveau du fichier projet et de mettre à jour Visual Studio vers la dernière version.

Compiler/déployer

Exécutables par défaut

.NET Core génère désormais des exécutables dépendant du runtime par défaut. Ce comportement est nouveau pour les applications qui utilisent une version .NET Core installée de façon globale. Auparavant, seuls les déploiements autonomes produisaient un exécutable.

Exécutable monofichier

La commande « dotnet publish » prend en charge l’empaquetage de votre application dans un exécutable monofichier spécifique de la plateforme. L’exécutable est auto-extractible et contient toutes les dépendances (y compris natives) nécessaires à l’exécution de votre application. Lors de la première exécution de l’application, celle-ci est extraite d’un répertoire basé sur le nom de l’application et l’identificateur de la build. Le démarrage est plus rapide quand l’application est réexécutée. L’application n’a pas besoin de s’extraire elle-même une deuxième fois, sauf si une nouvelle version a été utilisée.

Liaison d’assemblys

Le SDK .NET Core 3.0 est fourni avec un outil qui peut réduire la taille des applications en analysant le langage intermédiaire et en supprimant les assemblys inutilisés.

Compilation hiérarchisée

La compilation hiérarchisée est activée par défaut avec .NET Core 3.0. Cette fonctionnalité permet au runtime d’utiliser plus de manière adaptative le compilateur juste-à-temps (JIT) pour obtenir de meilleures performances.

Images ReadyToRun

Vous pouvez améliorer le temps de démarrage de votre application .NET Core en compilant les assemblys de votre application au format ReadyToRun (R2R). R2R est une forme de compilation ahead-of-time (AOT).

Les fichiers binaires R2R améliorent les performances de démarrage en réduisant la quantité de travail que le compilateur juste-à-temps (JIT) doit faire lorsque votre application est chargée. Les fichiers binaires contiennent du code natif similaire à ce que la compilation JIT produirait. Cependant, les fichiers binaires R2R sont plus grands, car ils contiennent à la fois le code du langage intermédiaire (IL), qui est toujours nécessaire pour certains scénarios, et la version native du même code. R2R est disponible seulement quand vous publiez une application autonome qui cible des environnements d’exécution spécifiques (RID), comme Linux x64 ou Windows x64.

Runtime/SDK

Restauration par progression du runtime de version majeure

.NET Core 3.0 introduit une fonctionnalité que vous pouvez choisir d’utiliser et qui permet de restaurer par progression votre application vers la dernière version majeure de .NET Core. 

Dépendances de copies de build

La commande « dotnet build » copie maintenant les dépendances NuGet pour votre application à partir du cache NuGet vers le dossier de sortie de build. Auparavant, les dépendances étaient copiées uniquement dans le cadre de « dotnet publish ».

Nouvelles options global.JSON

Le fichier global. JSON présente de nouvelles options qui offrent plus de flexibilité lorsque vous essayez de définir la version de la kit SDK .net Core utilisée. Les nouvelles options sont les suivantes :

  • allowPrerelease: indique si le programme de résolution du SDK doit prendre en compte les versions préliminaires lorsque vous sélectionnez la version du kit de développement logiciel (SDK) à utiliser.
  • rollForward: indique la stratégie de restauration par progression à utiliser lors de la sélection d’une version du kit de développement logiciel (SDK), en tant que solution de secours quand une version spécifique du kit de développement logiciel est manquante ou en tant que directive pour utiliser une version plus récente.

 

Tailles de tas de garbage collection plus petites

La taille de tas par défaut du récupérateur de mémoire a été réduite, aboutissant à une diminution de la quantité de mémoire utilisée par .NET Core. Ce changement est plus conforme au budget d’allocation de génération 0 avec les tailles des caches des processeurs modernes.

Prise en charge de grandes pages du garbage collection

Les grandes pages sont une fonctionnalité qui permet au système d’exploitation d’établir des régions de mémoire plus grandes que la taille de page native (souvent 4 Ko) pour améliorer les performances de l’application qui demande ces grandes pages.

Windows Desktop

Ordinateurs Windows

.NET Core 3.0 prend en charge les applications de bureau Windows utilisant Windows Presentation Foundation (WPF) et Windows Forms. Le composant Bureau Windows fait partie du SDK .NET Core 3.0 Windows.

Déploiement de MSIX

MSIX est un nouveau format de package d’application Windows. Il peut être utilisé pour déployer des applications de poste de travail .NET Core 3.0 pour Windows 10.

Améliorations de Linux

SerialPort pour Linux

.NET Core 3.0 offre une prise en charge de base de System.IO.Ports.SerialPort sur Linux. Auparavant, .NET Core était uniquement pris en charge au moyen de « SerialPort » sur Windows.

Docker et limites de mémoire cgroup

L’exécution de .NET Core 3,0 sur Linux avec l’arrimeur fonctionne mieux avec les limites de mémoire cgroup. L’exécution d’un conteneur Docker avec des limites de mémoire change le comportement de .NET Core.

Support ARM64 Linux

.NET Core 3.0 prend en charge ARM64 pour Linux. Actuellement, ARM64 est principalement utilisé dans des scénarios IoT.

Sécurité

TLS 1.3 et OpenSSL 1.1.1 sous Linux

.NET Core 3.0 utilise OpenSSL 1.1.1OpenSSL 1.1.0 ou OpenSSL 1.0.2 sur un système Linux s’ils sont disponibles. Quand OpenSSL 1.1.1 est disponible, les types System.Net.Securitty.SslStream et System.Net.Http.HttpClient utilisent TLS 1.3 (sous réserve que le client et le serveur prennent en charge TLS 1.3).

Importation/exportation d’une clé de chiffrement

.NET Core 3.0 prend en charge l’importation et l’exportation de clés publiques et privées asymétriques aux formats standard. Vous n’avez pas besoin d’utiliser un certificat X.509.

Modifications de l’API .NET Core 3,0

Plages et index

Les nouveaux types System.Index et System.Range peuvent être utilisés pour l’indexation. 

Flux asynchrones

Le type IAsyncEnumerable<T> est une nouvelle version asynchrone de IEnumerable<T>. Le langage vous permet d’utiliser « await foreach » sur IAsyncEnumerable<T> pour consommer ses éléments, et « yield return » sur ceux-ci pour produire des éléments.

Outre la possibilité d’effectuer une opération « await foreach », vous pouvez également créer des itérateurs asynchrones, par exemple un itérateur qui retourne un objet IAsyncEnumerable/IAsyncEnumerator auquel vous pouvez à la fois appliquer des opérations « await » et « yield ». Pour les objets qui doivent être supprimés, vous pouvez utiliser « IAsyncDisposable», qui implémentent différents types BCL, notamment « Stream » et « Timer ».

Intrinsèques dépendant de la plateforme .NET

Des API ont été ajoutées, qui permettent d’accéder à certaines instructions de l’UC orientées performances, comme les ensembles SIMD ou les ensembles d’instructions de manipulation de bits. Ces instructions peuvent améliorer les performances dans certains scénarios de matière significative, comme le traitement efficace de données en parallèle.

Le cas échéant, les bibliothèques .NET ont commencé à utiliser ces instructions pour améliorer les performances.

API de version de .NET Core améliorées

À compter de .NET Core 3.0, les API de version fournies avec .NET Core retournent les informations souhaitées.

Prise en charge JSON intégrée rapide

La nouvelle prise en charge de JSON intégrée est la haute performance, une faible allocation et fonctionne avec du texte JSON encodé en UTF-8.

.NET Core 3.1 :

Sortie le 9 décembre 2019

Prise en charge à long terme

La fonctionnalité la plus importante de .NET Core 3,1 est qu’il s’agit d’une version de prise en charge à long terme (LTS) avec prise en charge de Microsoft au cours des trois prochaines années. Il est fortement recommandé de déplacer vos applications vers .NET Core 3,1. 

Windows Forms

Windows uniquement

Les contrôles hérités étaient inclus dans Windows Forms qui n’étaient pas disponibles dans la boîte à outils du concepteur Visual Studio pendant un certain temps. Ils ont été remplacés par de nouveaux contrôles dans .NET Framework 2,0. Celles-ci ont été supprimées du kit de développement logiciel (SDK) pour .NET Core 3,1.

C++/CLI

Windows uniquement

Une prise en charge a été C++ajoutée pour la création de projets/CLI C++(également appelés projets « gérés »). Les fichiers binaires générés à partir de ces projets sont compatibles avec .NET Core 3,0 et versions ultérieures.

Pour aller plus loin

FORMATION ASP.NET CORE 3.1