.NET 7 fait enfin ce que .NET 5 était censé faire en 2020 : couronner les efforts déployés par Microsoft depuis des années pour unifier des produits de développement disparates avec "un seul .NET à l'avenir". Microsoft estime que les mots clés de cette version sont "unifié", "moderne" et "simple". Le terme "unifié" signifie que .NET 7 est basé sur une seule bibliothèque de classes de base (Base Class Library - BCL). Toutefois, cela ne signifie pas que les fonctions spécifiques à la plateforme ne sont pas disponibles, et les API spécifiques au système d'exploitation sont accessibles en spécifiant le moniker de trame cible (TFM) suivant.
En matière de "modernité", .NET MAUI, une bibliothèque d'interface utilisateur multiplateforme, fait désormais partie de .NET 7. .NET 7 est conçu pour les applications natives modernes, les clients mobiles, les services périphériques et les technologies de bureau. Créez des expériences mobiles à l'aide d'une base de code unique sans compromettre les performances natives grâce à .NET MAUI. Créez des applications à page unique (SPA) réactives qui s'exécutent dans votre navigateur et hors ligne en tant qu'applications Web progressives (PWA) à l'aide de technologies familières comme C# et les modèles Razor.
Ces expériences modernes plus rapides ne sont pas uniquement destinées aux nouvelles applications. L'assistant de mise à niveau .NET vous fournira des informations sur la compatibilité et, dans certains cas, assurera la migration complète de vos applications vers .NET 6 et .NET 7. Quant au mot "simple", Microsoft a mentionné des améliorations du langage : la BCL a introduit une interface générique liée aux mathématiques qui permet d'effectuer des opérations mathématiques de manière générique, c'est-à-dire indépendamment du type exact. Il n'est pas nécessaire de surcharger les méthodes pour chaque type.
« .NET 7 apporte à vos applications des performances accrues et de nouvelles fonctionnalités pour C# 11/F# 7, .NET MAUI, ASP.NET Core/Blazor, les API Web, WinForms, WPF, etc. Avec .NET 7, vous pouvez aussi facilement conteneuriser vos projets .NET 7, mettre en place des flux de travail CI/CD dans les actions GitHub et obtenir une observabilité cloud-native », ont écrit Jon Douglas, Jeremy Likness et Angelos Petropoulos dans un billet de blogue mardi.
Cibler .NET 7
Lorsque vous ciblez un framework dans une application ou une bibliothèque, vous spécifiez l'ensemble des API que vous souhaitez rendre disponibles. Pour cibler .NET 7, il suffit de modifier le framework cible dans votre projet.
Code : | Sélectionner tout |
<TargetFramework>net7.0</TargetFramework>
Les applications qui ciblent le moniker de framework cible net7.0 (TFM) fonctionneront sur tous les systèmes d'exploitation et architectures de CPU pris en charge. Elles vous donnent accès à toutes les API de .NET 7 ainsi qu'à un grand nombre d'API spécifiques au système d'exploitation, telles que :
- net7.0-android ;
- net7.0-ios ;
- net7.0-maccatalyst ;
- net7.0-macos ;
- net7.0-tvos ;
- net7.0-windows.
ARM64
L'industrie s'est orientée vers les processeurs ARM, tout comme .NET. L'un des principaux avantages des processeurs ARM est l'efficacité énergétique. Cela permet d'obtenir les meilleures performances avec la plus faible consommation d'énergie. Autrement dit, vous pouvez faire plus avec moins. Dans .NET 5, Microsoft a décrit les initiatives qu'il a prises en matière de performances pour ARM64. Aujourd'hui, deux versions plus tard, l'entreprise partage le chemin parcouru. Son objectif permanent est d'atteindre la parité de performances entre x64 et ARM64 afin d'aider les clients à transférer leurs applications .NET vers ARM.
Améliorations du temps d'exécution
Selon Microsoft, l'une des difficultés rencontrées lors des recherches sur x64 et ARM64 a été de découvrir que la taille du cache L3 n'était pas correctement lue sur les machines ARM64. L'équipe a modifié l'heuristique pour renvoyer une taille approximative si la taille du cache L3 ne pouvait pas être récupérée à partir du système d'exploitation ou du BIOS de la machine. Elle peut maintenant mieux évaluer le nombre de cœurs par taille de cache L3. Ensuite, elle a compris l'atomique de LSE. Ce qui, si vous n'êtes pas familier, fournit des API atomiques pour obtenir un accès exclusif aux régions critiques.
Sur les machines x86-x64 à architecture CISC, les opérations de lecture-modification-écriture (RMW) sur la mémoire peuvent être effectuées par une seule instruction en ajoutant un préfixe de verrouillage. Cependant, sur les machines à architecture RISC, les opérations RMW ne sont pas autorisées et toutes les opérations sont effectuées par le biais de registres. Par conséquent, pour les scénarios de concurrence, ils ont une paire d'instructions. L'instruction "Load Acquire" (ldaxr) permet d'obtenir un accès exclusif à la région de mémoire de telle sorte qu'aucun autre cœur ne puisse y accéder et l'instruction "Store Release" (stlxr) libère l'accès pour les autres cœurs.
Entre ces paires, les opérations critiques sont effectuées. Si l'opération stlxr a échoué parce qu'un autre processeur a opéré sur la mémoire après avoir chargé le contenu à l'aide de ldaxr, il existe un code pour réessayer (cbnz saute en arrière pour réessayer) l'opération. ARM a introduit les instructions atomiques LSE dans la version 8.1. Avec ces instructions, de telles opérations peuvent être effectuées en moins de code et plus rapidement que la version traditionnelle. Lorsque l'équipe a activé cette fonction pour Linux, puis l'a étendue à Windows, elle a constaté un gain de performance d'environ 45 %.
Améliorations des bibliothèques
Pour optimiser les bibliothèques qui utilisent des intrinsèques, l'équipe a ajouté de nouvelles aides multiplateformes. Il s'agit notamment d'aides pour Vector64, Vector128 et Vector256. Les aides multiplateformes permettent d'unifier les algorithmes de vectorisation en remplaçant les intrinsèques spécifiques au matériel par des intrinsèques agnostiques au matériel. Cela profitera aux utilisateurs de toutes les plateformes, mais l'équipe s'attend à ce que la plateforme ARM64 en bénéficie le plus, car les développeurs sans expertise ARM64 pourront toujours utiliser les aides pour tirer parti des intrinsèques du matériel Arm64.
La réécriture d'API telles que EncodeToUtf8 et DecodeFromUtf8 d'une implémentation SSE3 à une implémentation vectorielle peut apporter jusqu'à 60 % d'amélioration. De même, la conversion d'autres API, telles que NarrowUtf16ToAscii() et GetIndexOfFirstNonAsciiChar(), permet de gagner jusqu'à 35 % en performances.
Impact sur les performances
Grâce au travail de l'équipe sur .NET 7, de nombreux microbenchmarks se sont améliorés de 10 à 60 %. Au début de .NET 7, les requêtes par seconde (RPS) étaient plus faibles pour ARM64, mais ont lentement dépassé la parité de x64. De même, pour la latence (mesurée en millisecondes), l'équipe a dépassé la parité avec x64.
Prise en charge améliorée de .NET sous Linux
.NET 6 est inclus dans Ubuntu 22.04 (Jammy) et peut être installé avec la commande apt install dotnet6. En outre, il existe une image de conteneur optimisée, préconstruite et très petite qui peut être utilisée telle quelle.
Prise en charge d'IBM Power 64 bits
Outre l'architecture x64 (Intel/AMD 64 bits), ARM64 (ARM 64 bits) et s390x (IBM Z 64 bits), .NET est désormais également disponible pour l'architecture ppc64le (IBM Power 64 bits) ciblant RHEL 8.7 et RHEL 9.1. Grâce à la disponibilité de l'exécution native sur Power, les plus de 25 000 clients d'IBM Power peuvent consolider les applications .NET existantes sur Windows x86 pour les exécuter sur la même plateforme Power que leurs applications et bases de données professionnelles IBM i et AIX.
Ce faisant, ils peuvent améliorer considérablement le développement durable en réduisant jusqu'à 5 fois leur empreinte carbone, tout en bénéficiant d'une mise à l'échelle sur site de la capacité de RHEL (Red Hat Enterprise Linux) et d'OpenShift, et en assurant la sécurité des transactions et des données de bout en bout de l'entreprise.
Blazor
Blazor continue d'évoluer et .NET 7 comprend de nombreuses améliorations majeures. Blazor prend désormais en charge la gestion des événements de changement de lieu, améliore l'expérience de débogage WebAssembly et prend en charge l'authentification par OpenID Connect.
Assistant de mise à niveau
L'assistant de mise à niveau .NET fournit des conseils, des informations et une automatisation étape par étape pour faire passer vos anciennes applications à .NET 6 et .NET 7. Dans certains cas, il peut effectuer la migration pour vous. Il permet de réduire le temps et la complexité lors de la modernisation d'anciennes bases de code. Par exemple, apprenez comment faire passer vos applications WCF à .NET Core avec l'aide de CoreWCF. Avec .NET 7, les expériences améliorées comprennent :
- ASP.NET vers ASP.NET Core :
- adaptateurs System.Web (aperçu) ;
- migrations incrémentielles (aperçu) ;
- Ajout d'un plus grand nombre d'analyseurs et de correcteurs de code pour WinForms, WPF et les bibliothèques console/classe ;
- La possibilité d'analyser les binaires ;
- Prise en charge de UWP vers Windows App SDK et WinUI.
.NET pour les applications natives du cloud
Avec .NET 7, il est plus facile que jamais de créer des applications natives du cloud. Utilisez les services connectés de Visual Studio pour vous connecter en toute sécurité à un service de données et chiffrer vos chaînes de connexion dans un fichier de secrets d'utilisateur ou dans Azure Key Vault. Créez votre application directement dans une image de conteneur. Utilisez Entity Framework 7 pour écrire des requêtes LINQ (Language Integrated Query) fortement typées qui utilisent le support JSON de SQL Server pour extraire rapidement le contenu des documents JSON stockés dans votre base de données relationnelle.
Livrez des documents JSON sécurisés via des points de terminaison authentifiés en utilisant seulement quelques lignes de code avec l'expérience Minimal APIs. Obtenez des informations sur votre application en cours d'exécution avec Open Telemetry.
Prise en charge d'Azure
Non seulement .NET 7 est idéal pour créer des applications natives du cloud, mais les services PaaS d'Azure tels que App Service pour Windows et Linux, Static Web Apps, Azure Functions et Azure Container Apps sont prêts pour .NET 7. Tout au long de la première semaine de la sortie, il se peut que les temps de démarrage des applications .NET 7 soient légèrement plus longs, car le SDK .NET 7 sera installé juste à temps pour les clients qui créent de nouveaux App Services utilisant .NET 7. De même, si vous exécutez une version préliminaire de .NET 7, il vous suffit de redémarrer votre App Service pour passer aux bits GA.
Prise en charge intégrée des conteneurs
La popularité et l'utilisation pratique des conteneurs sont en hausse, et pour de nombreuses entreprises, ils représentent le moyen privilégié de déployer vers le cloud. Cependant, l'utilisation de conteneurs ajoute de nouvelles tâches au carnet de commandes d'une équipe, notamment la création et la publication d'images, le contrôle de la sécurité et de la conformité, et l'optimisation des performances des images. L'équipe pense qu'il est possible de créer une expérience meilleure et plus rationnelle avec les conteneurs .NET. Vous pouvez désormais créer des versions conteneurisées de vos applications avec seulement dotnet publish.
« Nous avons conçu cette solution dans le but de l'intégrer de manière transparente à la logique de construction existante, en tirant parti de nos propres outils C# et des performances d'exécution, et en l'intégrant directement dans le SDK .NET pour des mises à jour régulières », explique l'équipe.
Microsoft Orleans
Microsoft Orleans 7.0 offrira un modèle de programmation plus simple avec des Grains "plain old CLR object" (POCO), offrira des performances jusqu'à 150 % supérieures à celles de la version 3.x et introduira de nouvelles améliorations en matière de sérialisation et d'immuabilité. Les développeurs ASP.NET Core peuvent ajouter de l'état distribué avec simplicité en utilisant Orleans, et être sûrs que leurs applications évolueront horizontalement sans ajouter de complexité.
« Nous continuerons à investir pour rapprocher les fonctionnalités d'Orleans de la pile ASP.NET afin de garantir que vos applications Web et API sont prêtes à évoluer dans le nuage, dans des scénarios d'hébergement distribué ou même dans des déploiements multiclouds », a déclaré l'équipe.
Avec la prise en charge des mécanismes de stockage et des bases de données les plus courants et la possibilité de s'exécuter partout où ASP.NET Core peut s'exécuter, Orleans est un excellent choix pour doter vos applications .NET de capacités distribuées et natives du cloud sans avoir à apprendre un nouveau cadre ou un nouvel ensemble d'outils.
C# 11 et F# 7
Les plus récents ajouts aux langages C# et F# sont C# 11 et F# 7. C# 11 rend possible de nouvelles fonctionnalités telles que les mathématiques génériques tout en simplifiant votre code grâce à des améliorations de l'initialisation des objets, des chaînes de caractères brutes, et bien plus encore.
Bibliothèques .NET
.NET 7 a apporté des améliorations significatives à de nombreuses bibliothèques de premier plan de .NET. Vous y trouverez, entre autres, la prise en charge des annotations nullable pour les paquets Microsoft.Extensions.*, la personnalisation des contrats et les hiérarchies de types pour System.Text.Json, ainsi que de nouvelles API Tar pour vous aider à écrire des données au format TAR (Tape Archive).
SDK .NET
Le SDK .NET continue d'ajouter de nouvelles fonctionnalités pour vous rendre plus productif que jamais. Dans .NET 7, l'équipe améliore vos expériences avec la CLI .NET, la création de modèles et la gestion de vos paquets dans un emplacement central.
Performances
Les performances sont un élément important de chaque version de .NET. Chaque année, l'équipe .NET publie un blogue sur les dernières améliorations. Voici un court extrait du dernier billet sur les performances :
« .NET 7 est rapide. Vraiment rapide. Un millier de PR ayant un impact sur les performances ont été introduits dans les bibliothèques d'exécution et de base dans cette version, sans parler de toutes les améliorations apportées à ASP.NET Core, Windows Forms, Entity Framework et au-delà. C'est le .NET le plus rapide de tous les temps. Si votre responsable vous demande pourquoi votre projet devrait passer à .NET 7, vous pouvez répondre : "en plus de toutes les nouvelles fonctionnalités de la version, .NET 7 est super rapide" », a écrit Stephen Toub de Microsoft.
Support de .NET 7
.NET 7 est officiellement pris en charge par Microsoft. Il s'agit d'une version STS (Standard Term Support) qui sera supportée pendant 18 mois. Les versions impaires de .NET sont des versions STS qui bénéficient d'un support et de correctifs gratuits pendant six mois après une version STS ou LTS ultérieure.
Source : Microsoft
Et vous ?
Que pensez-vous des nouveautés et des améliorations apportées par .NET 7 ?
Voir aussi
.NET 6 apporterait jusqu'à 40 % de gain de vitesse par rapport .NET 5, les tests de mise en cache et de boucles serrées serraient jusqu'à 30 % plus rapide
Microsoft annonce la première version candidate de .NET 7, testé avec Visual Studio 17.4 Preview 2
Microsoft a annoncé la disponibilité générale de .NET 5 qui inclut C# 9, F# 5 et une prise en charge native de Windows Arm64
Microsoft annonce qu'il a apporté quelques améliorations importantes à Visual Studio 2019 16.8, afin de faciliter la migration de projets d'envergure de .NET Framework vers .NET 5