Nouveautés de .NET 7

.NET 7 succède à .NET 6. Cette version se veut unifiée, moderne, simple et rapide. .NET 7 sera pris en charge pendant 18 mois en tant que version STS (anciennement appelée version actuelle).

Cet article répertorie les nouvelles fonctionnalités de .NET 7 et fournit des liens vers des informations plus détaillées sur chacune d’elles.

Pour trouver tous les articles .NET qui ont été mis à jour pour .NET 7, consultez Documentation .NET : Nouveautés de la version .NET 7.

Performances

Les performances sont une préoccupation majeure dans .NET 7. Toutes les fonctionnalités de cette version ont été conçues dans ce sens. En outre, .NET 7 offre les améliorations suivantes, essentiellement axées sur les performances :

  • L’OSR (On-Stack Replacement) vient en complément de la compilation hiérarchisée. Il permet au runtime de changer le code exécuté par une méthode en cours d’exécution au milieu de son exécution (autrement dit, alors qu’elle est « sur la pile »). Les méthodes durables peuvent ainsi basculer vers des versions plus optimisées au milieu de leur exécution.
  • L’optimisation guidée par profil (PGO) fonctionne désormais avec OSR et est plus facile à activer (en ajoutant <TieredPGO>true</TieredPGO> à votre fichier projet). PGO peut également instrumenter et optimiser d’autres éléments, tels que des délégués.
  • Amélioration de la génération du code pour Arm64.
  • L’AOT natif produit un exécutable autonome au format de fichier de la plateforme cible sans dépendance externe. Entièrement natif, sans IL ou JIT, il offre un temps de démarrage rapide et un déploiement autonome de petite taille. Dans .NET 7, l’AOT natif se concentre sur les applications console et nécessite le découpage des applications.
  • Améliorations des performances du runtime Mono, sur lequel sont basées les applications Blazor WebAssembly, Android et iOS.

Pour plus de détails sur la plupart des fonctionnalités axées sur les performances qui rendent .NET 7 si rapide, consultez le billet de blog Améliorations des performances dans .NET 7.

Sérialisation de System.Text.Json

.NET 7 inclut des améliorations apportées à la sérialisation de System.Text.Json dans les domaines suivants :

  • La personnalisation du contrat vous permet de mieux contrôler la façon dont les types sont sérialisés et désérialisés. Pour plus d’informations, consultez Personnaliser un contrat JSON.
  • Sérialisation polymorphe pour les hiérarchies de types définis par l’utilisateur. Pour plus d’informations, consultez Sérialiser les propriétés des classes dérivées.
  • Prise en charge des membres obligatoires, qui sont les propriétés devant obligatoirement être présentes dans la charge utile JSON pour que la désérialisation réussisse. Pour plus d’informations, consultez Propriétés obligatoires.

Pour plus d’informations sur ces mises à jour et d’autres mises à jour, consultez le billet de blog Nouveautés de System.Text.Json dans .NET 7.

Mathématiques génériques

.NET 7 et C# 11 incluent plusieurs innovations qui vous permettent d’effectuer des opérations mathématiques de manière générique, c’est-à-dire sans que vous ayez besoin de connaître le type exact avec lequel vous travaillez. Par exemple, pour écrire une méthode qui ajoute deux nombres, vous deviez auparavant ajouter une surcharge de la méthode pour chaque type. Désormais, vous pouvez écrire une méthode générique unique, où le paramètre de type est contraint d’être un type numérique. Pour plus d’informations, consultez l’article Mathématiques génériques et le billet de blog Mathématiques génériques.

Expressions régulières

La bibliothèque d’expressions régulières de .NET a été largement améliorée sur le plan du fonctionnement et des performances dans .NET 7 :

  • La nouvelle option RegexOptions.NonBacktracking permet une mise en correspondance par une approche qui évite le retour sur trace et qui garantit un traitement en temps linéaire dans la longueur de l’entrée. Le moteur sans retour sur trace ne peut pas être utilisé dans une recherche de droite à gauche et présente quelques autres restrictions, mais il est rapide pour toutes les expressions et entrées régulières. Pour plus d’informations, consultez Mode de non retour sur trace.

  • Les générateurs de sources d’expressions régulières sont nouveaux. Les générateurs de sources créent un moteur optimisé pour votre modèle au moment de la compilation, ce qui contribue à améliorer les performances de débit. Comme la source émise fait partie de votre projet, vous pouvez l’afficher et la déboguer. De plus, un nouveau diagnostic SYSLIB1045 pour les générateurs de sources vous avertit des emplacements d’utilisation de Regex qui pourraient être convertis en générateur de source. Pour plus d’informations, consultez Générateurs de sources d’expressions régulières .NET.

  • Pour les recherches qui ne respectent pas la casse, .NET 7 offre des gains de performances importants. Les gains viennent du fait que la spécification de RegexOptions.IgnoreCase n’appelle plus ToLower sur chaque caractère dans le modèle et sur chaque caractère dans l’entrée. Au lieu de cela, tout le travail de casse est effectué lorsque le Regex est construit.

  • Regex prend maintenant en charge les étendues pour certaines API. Les nouvelles méthodes suivantes ont été ajoutées dans le cadre de cette prise en charge :

Pour plus d’informations sur ces améliorations et d’autres améliorations, consultez le billet de blog sur les améliorations des expressions régulières dans .NET 7.

Bibliothèques .NET

De nombreuses améliorations ont été apportées aux API de bibliothèque .NET. Certaines sont décrites dans d’autres sections dédiées de cet article. D’autres sont résumées dans le tableau ci-dessous.

Description API Informations supplémentaires
Prise en charge des microsecondes et des nanosecondes dans les types TimeSpan, TimeOnly, DateTime et DateTimeOffset - DateTime.Microsecond
- DateTime.Nanosecond
- DateTime.AddMicroseconds(Double)
- Nouvelles surcharges du constructeur DateTime

- DateTimeOffset.Microsecond
- DateTimeOffset.Nanosecond
- DateTimeOffset.AddMicroseconds(Double)
- Nouvelles surcharges du constructeur DateTimeOffset

- TimeOnly.Microsecond
- TimeOnly.Nanosecond

- TimeSpan.Microseconds
- TimeSpan.Nanoseconds
- TimeSpan.FromMicroseconds(Double)
- Et autres...
Grâce à ces API, vous n’avez plus besoin d’effectuer des calculs sur la valeur « tick » pour déterminer les valeurs en microsecondes et nanosecondes. Pour plus d’informations, consultez le billet de blog .NET 7 Preview 4.
API pour la lecture, l’écriture, l’archivage et l’extraction d’archives Tar System.Formats.Tar Pour plus d’informations, consultez les billets de blog .NET 7 Preview 4 et .NET 7 Preview 6.
API de limitation du débit pour protéger une ressource en maintenant le trafic à un niveau sûr RateLimiter et autres dans le package NuGet System.Threading.RateLimiting Pour plus d’informations, consultez Limite de débit d’un gestionnaire HTTP dans .NET et Annonce de la limitation du débit pour .NET.
API pour lire toutes les données d’un Stream - Stream.ReadExactly
- Stream.ReadAtLeast
Stream.Read peut parfois retourner moins de données que la quantité de données disponible dans le flux. Les nouvelles méthodes ReadExactly lisent exactement le nombre d’octets demandés, et les nouvelles méthodes ReadAtLeast lisent au moins le nombre d’octets demandés. Pour plus d’informations, consultez le billet de blog .NET 7 Preview 5.
Nouveaux convertisseurs de types pour DateOnly, TimeOnly, Int128, UInt128 et Half Dans l’espace de noms System.ComponentModel :

- DateOnlyConverter
- TimeOnlyConverter
- Int128Converter
- UInt128Converter
- HalfConverter
Les convertisseurs de types sont souvent utilisés pour convertir des types valeur vers et à partir d’une chaîne. Ces nouvelles API ajoutent des convertisseurs de types pour les types qui ont été ajoutés récemment.
Prise en charge des métriques pour IMemoryCache - MemoryCacheStatistics
- MemoryCache.GetCurrentStatistics()
GetCurrentStatistics() vous permet d’utiliser des compteurs d’événements ou des API de métriques pour suivre les statistiques d’un ou de plusieurs caches en mémoire. Pour plus d’informations, consultez le billet de blog .NET 7 Preview 4.
API pour obtenir et définir des autorisations de fichier Unix - enum System.IO.UnixFileMode
- File.GetUnixFileMode
- File.SetUnixFileMode
- FileSystemInfo.UnixFileMode
- Directory.CreateDirectory(String, UnixFileMode)
- FileStreamOptions.UnixCreateMode
Pour plus d’informations, consultez le billet de blog .NET 7 Preview 7.
Attribut servant à indiquer le type de syntaxe attendu dans une chaîne StringSyntaxAttribute Par exemple, vous pouvez spécifier qu’un paramètre string attend une expression régulière en attribuant au paramètre l’attribut [StringSyntax(StringSyntaxAttribute.Regex)].
API d’interopérabilité avec JavaScript lors de l’exécution dans le navigateur ou d’autres architectures WebAssembly System.Runtime.InteropServices.JavaScript Les applications JavaScript peuvent utiliser la prise en charge étendue de WebAssembly dans .NET 7 pour réutiliser les bibliothèques .NET à partir de JavaScript. Pour plus d’informations, consultez Utiliser .NET à partir d’une application JavaScript dans .NET 7.

Observabilité

.NET 7 apporte des améliorations à l’observabilité. L’observabilité vous aide à suivre l’état de votre application à mesure qu’elle se développe et qu’elle devient plus complexe techniquement. L’implémentation de l’observabilité de .NET est principalement basée sur OpenTelemetry. Les améliorations incluent :

Pour plus d’informations, consultez le billet de blog .NET 7 Preview 4.

Kit de développement logiciel (SDK) .NET

Le SDK .NET 7 améliore l’expérience du modèle CLI. Il permet également la publication sur des conteneurs, et la gestion centralisée des packages avec NuGet.

Modèles

Plusieurs améliorations intéressantes ont été apportées à la commande dotnet new et à la création de modèles.

dotnet new

La commande CLI dotnet new, qui crée un projet, un fichier de configuration ou une solution basée sur un modèle, prend désormais en charge la complétion via la touche TAB pour l’exploration des :

  • Noms de modèles disponibles
  • Options de modèle
  • Valeurs d’option autorisées

De plus, pour une meilleure conformité, les sous-commandes install, uninstall, search, list et update ne comportent plus le préfixe --.

Création

Les contraintes de modèle, nouveau concept introduit dans .NET 7, vous permettent de définir le contexte dans lequel vos modèles sont autorisés. Les contraintes aident le moteur de modèles à déterminer quels modèles il doit afficher dans des commandes comme dotnet new list. Vous pouvez contraindre votre modèle à un système d’exploitation, à un hôte de moteur de modèles (par exemple, l’interface CLI .NET ou la boîte de dialogue Nouveau projet dans Visual Studio) et à une charge de travail installée. Vous définissez les contraintes dans le fichier de configuration de votre modèle.

Dans le fichier de configuration du modèle, vous pouvez aussi désormais annoter un paramètre de modèle comme autorisant plusieurs valeurs. Par exemple, le modèle web autorise plusieurs formes d’authentification.

Pour plus d’informations, consultez le billet de blog .NET 7 Preview 6.

Publication sur un conteneur

Les conteneurs sont l’un des moyens les plus simples de distribuer et d’exécuter un large éventail d’applications et de services dans le cloud. Les images conteneurs sont maintenant un type de sortie pris en charge du SDK .NET, et vous pouvez créer des versions conteneurisées de vos applications avec dotnet publish. Pour plus d’informations sur la fonctionnalité, consultez Annonce de la prise en charge des conteneurs intégrés pour le SDK .NET. Pour obtenir un tutoriel, consultez Conteneuriser une application .NET avec dotnet publish.

Gestion centralisée des packages

Vous pouvez désormais gérer les dépendances communes dans vos projets à partir d’un emplacement unique, en utilisant la fonctionnalité de gestion centralisée des packages (CPM) de NuGet. Pour l’activer, ajoutez un fichier Directory.Packages.props à la racine de votre dépôt. Dans ce fichier, définissez la propriété MSBuild ManagePackageVersionsCentrally sur true et ajoutez des versions pour la dépendance de package commune à l’aide d’éléments PackageVersion. Ensuite, dans chacun des fichiers projet, vous pouvez omettre les attributs Version de tous les éléments PackageReference qui référencent des packages gérés de manière centralisée.

Pour plus d’informations, consultez Gestion centralisée des packages.

Génération de source P/Invoke

.NET 7 introduit un générateur de source pour les appels de code non managé (P/Invoke) en C#. Le générateur de source recherche LibraryImportAttribute sur les méthodes static, partial pour déclencher la génération de source au moment de la compilation du code de marshaling. En générant le code de marshaling au moment de la compilation, aucun stub IL n’a besoin d’être généré au moment de l’exécution, contrairement à ce qui se produit quand DllImportAttribute est utilisé. Le générateur de source améliore les performances de l’application, et permet également la compilation Ahead Of Time (AOT) de l’application. Pour plus d’informations, consultez Génération de source pour les appels de code non managé et Utiliser des marshalers personnalisés dans les appels P/Invoke générés par la source.

Cette section contient des informations sur les produits associés qui ont des versions correspondant à la version .NET 7.

Visual Studio 2022 version 17.4

Pour plus d’informations, consultez Nouveautés de Visual Studio 2022.

C# 11

C# 11 inclut la prise en charge des mathématiques génériques, des littéraux de chaîne brute, des types de fichiers inclus dans l’étendue et d’autres nouvelles fonctionnalités. Pour plus d’informations, consultez Nouveautés de C# 11.

F# 7

F# 7 poursuit le parcours de simplification du langage de programmation, et d’amélioration des performances et de l’interopérabilité avec les nouvelles fonctionnalités C#. Pour plus d’informations, consultez Annonce de F# 7.

.NET MAUI

L’interface utilisateur d’application multiplateforme .NET (.NET MAUI) est une infrastructure multiplateforme permettant de créer des applications mobiles et de bureau natives avec C# et XAML. Elle unifie les API Android, iOS, macOS et Windows en une API unique. Pour plus d’informations sur les dernières mises à jour, consultez Nouveautés de .NET MAUI pour .NET 7.

ASP.NET Core

ASP.NET Core 7.0 inclut des middlewares de limitation de débit, des améliorations apportées aux API minimales et le transcodage JSON gRPC. Pour plus d’informations sur l’ensemble des mises à jour, consultez Nouveautés d’ASP.NET Core 7.

EF Core

Entity Framework Core 7.0 inclut une prise en charge indépendante du fournisseur pour les colonnes JSON, une amélioration des performances d’enregistrement des modifications ainsi que des modèles d’ingénierie à rebours personnalisés. Pour plus d’informations sur l’ensemble des mises à jour, consultez Nouveautés d’EF Core 7.0.

Windows Forms

Beaucoup de travail a été effectué dans Windows Forms pour .NET 7. Des améliorations ont été apportées dans les domaines suivants :

  • Accessibilité
  • Haute résolution et mise à l’échelle
  • Liaison de données

Pour plus d’informations, consultez Nouveautés de Windows Forms pour .NET 7.

WPF

WPF pour .NET 7 inclut de nombreux correctifs de bogues, ainsi que des améliorations des performances et de l’accessibilité. Pour plus d’informations, consultez le billet de blog Nouveautés de WPF pour .NET 7.

Orleans

Orleans est une infrastructure multi-plateforme permettant de générer des applications distribuées robustes et évolutives. Pour plus d’informations sur les dernières mises à jour de Orleans, consultez Migrer de 3.x Orleans à 7.0.

Assistant Mise à niveau de .NET et CoreWCF

L’Assistant Mise à niveau de .NET prend désormais en charge la mise à niveau d’applications WCF côté serveur vers CoreWCF, qui est un portage de WCF vers .NET (Core) créé par la communauté. Pour plus d’informations, consultez Mettre à niveau un projet WCF côté serveur pour utiliser CoreWCF.

ML.NET

ML.NET inclut maintenant une API de classification de texte qui facilite l’entraînement des modèles de classification de texte personnalisée à l’aide des techniques de Deep Learning les plus récentes. Pour plus d’informations, consultez les billets de blog Nouveautés d’AutoML et des outils et Présentation de l’API de classification de texte ML.NET.

Voir aussi