Partager via


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 chacun d’eux.

Performances

Les performances sont un élément clé de .NET 7, et toutes ses fonctionnalités sont conçues avec des performances à l’esprit. En outre, .NET 7 inclut les améliorations suivantes destinées uniquement aux 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 de longue durée peuvent basculer vers des versions plus optimisées au milieu de l’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 des éléments supplémentaires, tels que des délégués.
  • Amélioration de la génération de code pour Arm64.
  • Native AOT produit un exécutable autonome au format de fichier de la plateforme cible sans dépendances externes. Il est entièrement natif, sans IL ni JIT, et offre un démarrage rapide ainsi qu'un déploiement autonome et compact. Dans .NET 7, Native AOT se concentre sur les applications console et nécessite que les applications soient supprimées.
  • Améliorations des performances apportées au runtime Mono, qui alimente Blazor WebAssembly, Android et les applications iOS.

Pour obtenir un aperçu détaillé de la plupart des fonctionnalités axées sur les performances qui rendent .NET 7 si rapide, consultez les Améliorations des performances dans .NET 7 billet de blog.

Sérialisation de System.Text.Json

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

  • Personnalisation du contrat vous donne plus de contrôle sur 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éfinies 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 requises.

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

Mathématiques génériques

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

Expressions régulières

La bibliothèque d’expressions régulières de .NET a connu des améliorations significatives fonctionnelles et de performance dans le .NET 7.

  • La nouvelle option RegexOptions.NonBacktracking permet la correspondance en utilisant une approche évitant le retour arrière et garantissant un traitement en temps linéaire par rapport à 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 récents. 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. La source émise fait partie de votre projet, ce qui vous permet de l’afficher et de le 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 les 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 désormais en charge les « spans » 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, consultez la section sur les améliorations des expressions régulières dans le billet de blog sur .NET 7.

Bibliothèques .NET

De nombreuses améliorations ont été apportées aux API de bibliothèque .NET. Certains sont mentionnés dans d’autres sections dédiées de cet article. D’autres sont résumées dans le tableau suivant.

Description APIs Informations supplémentaires
Prise en charge des microsecondes et des nanosecondes dans les types TimeSpan, TimeOnly, DateTimeet 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 d’autres...
Ces API signifient que vous n’avez plus besoin d’effectuer des calculs sur la valeur « tick » pour déterminer les valeurs 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.
Limiter les API de limitation de débit pour protéger une ressource en conservant 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 retourner moins de données que celles disponibles 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, UInt128et 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 ajoutés plus 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 plusieurs caches de 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 - System.IO.UnixFileMode enum
- 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 pour 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 le paramètre avec [StringSyntax(StringSyntaxAttribute.Regex)].
API permettant d’interagir avec JavaScript lors de l’exécution dans le navigateur ou dans 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 des bibliothèques .NET à partir de JavaScript. Pour plus d’informations, consultez Utiliser .NET à partir de n’importe quelle application JavaScript dans .NET 7.

Observabilité

.NET 7 apporte des améliorations à l’observabilité. L’observabilité vous aide à comprendre l’état de votre application à mesure qu’elle est mise à l’échelle et à mesure que la complexité technique augmente. L’implémentation de l’observabilité de .NET est principalement basée sur OpenTelemetry. Les améliorations sont les suivantes :

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

.NET SDK

Le Kit de développement logiciel (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

Certaines améliorations bienvenues 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

En outre, pour une meilleure conformité, les sous-commandes install, uninstall, search, listet update sous-commandes n’ont plus le préfixe --.

Création

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

Dans le fichier de configuration de modèle, vous pouvez 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.

Publier dans un conteneur

Les conteneurs constituent l’une des méthodes les plus simples pour distribuer et exécuter un large éventail d’applications et de services dans le cloud. Les images conteneur sont désormais un type de sortie pris en charge du Kit de développement logiciel (SDK) .NET, et vous pouvez créer des versions conteneurisées de vos applications à l’aide de dotnet publish. Pour plus d’informations sur la fonctionnalité, consultez Annonce de la prise en charge native des conteneurs pour le SDK .NET. Pour obtenir un didacticiel, consultez Containeriser une application .NET avec dotnet publish.

Gestion centralisée des packages

Vous pouvez désormais gérer les dépendances courantes dans vos projets à partir d’un emplacement à l’aide de la fonctionnalité de gestion centralisée des packages (CPM) de NuGet. Pour l’activer, vous ajoutez un fichier Directory.Packages.props à la racine de votre référentiel. Dans ce fichier, définissez la propriété MSBuild ManagePackageVersionsCentrally sur true et ajoutez des versions pour la dépendance de paquet courante avec les é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 la gestion centralisée des packages .

Génération de source P/Invoke

.NET 7 introduit un générateur source pour les appels de plateforme (P/Invokes) 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, comme il le fait lors de l’utilisation de DllImportAttribute. Le générateur source améliore les performances de l’application et permet également à l’application d’être compilée à l’avance (AOT). 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 qui coïncident avec 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 bruts , des types limités à un fichier, et d'autres nouvelles fonctionnalités. Pour plus d’informations, consultez Nouveautés de C# 11.

F# 7

F# 7 poursuit le parcours pour simplifier le langage et améliorer les performances et l’interopérabilité avec de 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. Il unifie les API Android, iOS, macOS et Windows en une seule API. 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 un intergiciel à limitation de débit, des améliorations apportées aux API minimales et au transcodage JSON gRPC. Pour plus d’informations sur toutes les mises à jour, consultez Nouveautés de ASP.NET Core 7.

EF Core

Entity Framework Core 7.0 inclut la prise en charge indépendante du fournisseur pour les colonnes JSON, des performances améliorées pour l’enregistrement des modifications et des modèles d’ingénierie inverse personnalisés. Pour plus d’informations sur toutes les 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 dans .NET 7.

WPF

WPF dans .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 blog billet Nouveautés de WPF dans .NET 7.

Orleans

Orleans est une infrastructure multiplateforme permettant de créer des applications distribuées robustes et évolutives. Pour plus d’informations sur les dernières mises à jour de Orleans, consultez Migrer de Orleans 3.x à 7.0.

Assistant de mise à niveau .NET et CoreWCF

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

ML.NET

ML.NET inclut désormais une API de classification de texte qui facilite l’apprentissage des modèles de classification de texte personnalisés à l’aide des dernières techniques d’apprentissage profond de pointe. Pour plus d’informations, consultez les nouveautés de l’API AutoML et des outils et Présentation de l’API de classification de texte ML.NET billets de blog.

Voir aussi