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
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 :
- Regex.EnumerateMatches
- Regex.Count
- Regex.IsMatch(ReadOnlySpan<Char>) (et quelques autres surcharges)
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 , 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 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 :
- Le nouvel événement Activity.CurrentChanged, que vous pouvez utiliser pour détecter quand le contexte d’étendue d’un thread managé change.
- Nouvelles méthodes d’énumérateur performantes pour les propriétés de Activity : EnumerateTagObjects(), EnumerateLinks()et EnumerateEvents().
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
, list
et 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.
Versions associées
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
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.