Comme vous le savez sûrement déjà, Microsoft sort chaque année une nouvelle version de .NET. Au moment de la rédaction de cet article, .NET 6 et .NET 7 sont les deux versions les plus récentes de la plateforme Microsoft .NET. Ces deux versions proposent un grand nombre de fonctionnalités et d’améliorations, mais certaines différences entre ces deux versions sont à porter à la connaissance des développeurs.
Intéressons-nous de plus près aux différences entre .NET 6 et .NET 7.
.NET 6 est sorti en novembre 2021, tandis que .NET 7 est sorti en novembre 2022.
Summary
Performance
Cette année, l’accent est mis sur la performance. Les développeurs de Microsoft ont passé une année à perfectionner la précédente version, pull request après pull request. Ils ont amélioré le Language-Integrated Query (LINQ) et le compilateur JIT (Just-In-Time). Entre autres.
1. LINQ
LINQ (Language-Integraded Query) est le nom d’un ensemble de technologies basé sur l’intégration de fonctions de requête directement dans le langage C#.
La vectorisation optimise l’utilisation des équipements les plus récents en permettant à .NET de traiter rapidement une importante quantité de données. La rapidité d’agrégation de LINQ n’a jamais été aussi rapide. Par exemple, une requête recherchant la moyenne d’un ensemble d’un million d’unités s’effectue 26 fois plus rapidement..
.NET étant open-source, vous pouvez vérifier le code source et confirmer ce niveau de performance avec la classe Vecteur.
Étant donné que de nombreux développeurs utilisent LINQ pour une multitude de cas, cela est un avantage certain pour .NET.
Le résultat est incroyablement rapide. La durée mesurée ici correspond aux délais nécessaires à .NET 6 et .NET 7 pour trier un tableau de 1 000 entiers. Presque toutes les opérations d’agrégation avec LINQ sont désormais plus rapides.
2. JIT
JIT signifie « Just-In-Time » (compilation à la volée) et correspond à un type de compilateurs qui compilent le code lors de l’exécution, selon les besoins, plutôt qu’en amont. Cela permet d’améliorer les performances d’un programme en permettant au compilateur d’optimiser le code en fonction de l’environnement spécifique dans lequel il opère. Il utilise également des OSR (on-stack replacement) complexes.
Le remplacement de stack est une technique permettant d’optimiser les performances du code d’exécution. Lorsqu’une fonction est appelée, les arguments et les variables locales sont généralement organisées dans un stack. Le remplacement de stack permet au compilateur JIT de remplacer les valeurs stack fréquemment consultées par des registres, auxquels il est bien plus rapide d’accéder. La procédure consiste à identifier les valeurs de stack les plus fréquemment consultées et à leur attribuer des registres pour conserver ces valeurs. Les emplacements de stack libres peuvent ensuite être utilisés pour stocker d’autres données ou instructions, optimisant ainsi l’utilisation de la mémoire et une exécution de code plus rapide.
Développement Web
Les versions .NET 6 et .NET 7 présentent toutes deux des améliorations en matière de développement web. Par exemple, .NET 6 a adopté une nouvelle infrastructure web appelée API minimales, permettant aux développeurs de rapidement mettre en place des endpoints HTTP légers sans MVC complet. .NET 7 est censé consolider cet aspect grâce à l’amélioration des API minimales, ainsi que d’autres fonctionnalités de développement web comme un support amélioré pour gRPC.
1. Minimal APIs
L’une des plus importantes modifications en matière de développement web dans .NET 6 est l’apparition des API minimales.
Les API minimales sont conçues pour créer des API HTTP avec des dépendances minimales. Cette nouvelle infrastructure web permet aux développeurs de rapidement mettre en place des endpoints HTTP légers sans MVC complet.
Avec les API minimales, vous pouvez tout simplement définir vos endpoints avec du code C#, ce qui vous simplifie grandement les choses pour vous lancer dans le développement web dans .NET. Il s’agit de la solution idéale pour les microservices et les apps qui ne souhaitent utiliser qu’un minimum de fichiers, de fonctionnalités et de dépendances dans ASP.NET Core.
.NET 7 s’appuie sur la fonctionnalité API minimales en apportant davantage de capacités et d’améliorations. Comme des filtres endpoint, des groupes de routage et des résultats typés, rendant les API minimales encore plus puissantes et efficaces. Rendant ainsi cette option encore plus performante pour le développement d’applications web légères.
2. Blazor
Blazor est un framework de développement web bien connu permettant aux développeurs de créer des applications web dans C# et .NET au lieu de JavaScript. Blazor a connu un grand nombre d’améliorations avec .NET 6, dont un meilleur support en matière de restitution côté serveur et une amélioration de la vitesse. Les améliorations de Blazor se poursuivent avec .NET 7, avec notamment de nouvelles fonctionnalités et additions qui le rendent encore plus performant et simple à utiliser.
Par exemple, vous pouvez utiliser les composants Blazor de projets JavaScript existants, comme ceux créés dans de célèbres frameworks front-end : Angular, React ou Vue.
Les navigateurs actuels utilisent des API pour créer des composants personnalisés incluant des éléments IU. Ces éléments personnalisés peuvent ensuite être utilisés dans n’importe quelle interface web.
- La configuration des liaisons de données (Get/Set/After Modifiers) a également été améliorée.
- De nouveaux modèles Blazor vierges pour commencer votre projet dans Visual Studio.
- Un meilleur soutien pour les algorithmes cryptés.
- De nouveaux événements et requêtes d’authentification.
- Plus de dépendance avec le modèle de composant IU Blazor. Vous pouvez invoquer le code .NET dans JavaScript pendant l’exécution de .NET WebAssembly ou utiliser la fonctionnalité JavaScript de .NET.
3. gRPC
gRPC est un framework RPC (Remote Procedure Call) open-source permettant de développer des API modulables et extrêmement performantes pouvant être utilisées sur de nombreuses plateformes et avec de nombreux langages. .NET 6 a permis de mettre en place un meilleur soutien pour gRPC, favorisant ainsi le développement des applications basées sur gRPC avec .NET.
.NET 7 continue d’améliorer le soutien pour gRPC comme :
- Amélioration des performances
- Création de services RESTful avec le transcodage gRPC JSON
- Apps gRPC sur Azure App Services
4. OpenAPI
La spécification OpenAPI (OAS) permet aux API compatibles avec REST d’être décrites, développées, testées et documentées. En résumé, il s’agit d’une spécification pour un langage de définition d’interface lisible par machine pour décrire, produire, consommer et visualiser des services web.
.NET 6 a adopté le support intégré pour les OpenAPI, facilitant la génération de documentation API et permettant de tester votre API avec l’IU Swagger.
.NET 7 est censé poursuivre les améliorations en matière de support des OpenAPI, avec davantage de fonctionnalités et d’améliorations qui facilitent d’autant plus la création et la documentation d’API avec .NET. En résumé, les versions .NET 6 et .NET 7 apportent toutes deux des améliorations et perfectionnements en matière de développement web avec des fonctionnalités comme les API minimales, Blazor, gRPC et les OpenAPI simplifiant la création d’applications web rapides, modulables et performantes dans .NET.
Développement Desktop
.NET 7 présente des mises à jour et des améliorations significatives aux frameworks de développement bureau (et mobile), en les simplifiant et en les rendant plus modernes et rapides :
1. WinForms
WinForm (raccourci de Windows Form Application) est un framework UI utilisé pour le développement des applications de bureau Windows depuis une vingtaine d’années. Microsoft souhaite « aider les développeurs de Windows Forms à moderniser leurs apps existantes et à adopter les nouvelles technologies cloud ». Une façon de parvenir à cela consiste à encourager les développeurs à transitionner des patterns de code-behind traditionnels vers le pattern MVVM. Ce pattern plus moderne aidera les développeurs à extraire la logique applicative des pages de code-behind et à simplifier le code à tester en le rendant plus facilement réutilisable. En outre, le système de liaison de données de WinForms a été harmonisé avec ceux de WPF et Xamarin, des technologies ayant déjà adopté le MVVM.
Précédemment dans cet article, nous avons parlé de la compilation à la volée JIT . Microsoft a encouragé et facilité l’expérimentation de la publication d’applications avec NativeAOT, une alternative au JIT, en ajoutant une simple ligne dans le fichier .csproj. Les avantages attendus de cette technologie sont un temps de démarrage plus rapide, une utilisation plus faible de la mémoire ainsi que la possibilité de lancer l’application sur n’importe quel appareil Windows ou Linux sur lequel .NET Runtime n’est pas encore installé.
De plus, l’équipe Microsoft et certains membres de la communauté ont beaucoup travaillé sur d’autres points. Les fonctions glisser-déplacer et de boîte de dialogue ont été modernisées.. L’accessibilité, la visibilité et l’automatisation des commandes de WinForms ont été améliorées. Enfin, un certain nombre de problèmes d’affichage des commandes WinForms ont été résolus. Dans .NET 7 devblogs, Microsoft a communiqué sur la poursuite du laborieux processus de résolution des bugs HiGH DPI ainsi que sur les problèmes de dimensionnement pour les écrans spéciaux ou les configurations multi-écrans.
2. WPF
WPF (Windows Presentation Foundation) a également bénéficié de plusieurs mises à jour, notamment en matière de performance, d’accessibilité et de résolution des bugs. L’amélioration des performances des bibliothèques WPF a été réalisée en évitant le boxing des variables, en supprimant les objets superflus et la collection des allocations, ainsi qu’en refactorisant des classes diverses comme les wrappers ou les parsers. Cette nouvelle version de .NET améliore l’accessibilité de l’application par l’ajout de nouveaux raccourcis bien utiles. Les lecteurs d’écran sont désormais en mesure de d’afficher les éléments de menu à cocher. Grâce aux retours de la communauté, de nombreux bugs ont été résolus. Microsoft prévoit de rendre publics les tests internes d’intégration sur GitHub, ce qui permettrait aux développeurs d’améliorer le contrôle qualité en ajoutant leurs propres tests d’intégration à ce référentiel. L’équipe interne de Microsoft est particulièrement reconnaissante de la participation de la communauté et poursuit son travail de contrôle qualité en réalisant des tests de régression basiques sur des pull requests.
3. .NET MAUI
L’IU d’application multiplateforme .NET est le framework utilisé pour créer des apps pour mobiles et bureau multiplateformes natives à partir d’un simple code de base C# pour Android, iOS, Mac et Windows. Une multitude de nouvelles commandes ont été ajoutées au jeune framework MAUI lancé en avril 2022. La commande Map officielle tant attendue est enfin disponible pour ajouter une carte, des marqueurs, de polygones, des épingles, géolocaliser l’utilisateur, le trafic, etc. dans votre application mobile ou bureau.
En plus de cela, un contrôle TwoPaneView a été ajouté. Cette commande permet de positionner le contenu enfant côte-à-côte ou verticalement et aligne ce même contenu par rapport à la charnière ou à la pliure de l’écran sur les appareils Android pliables. De nombreuses fonctionnalités de bureau IU de base ont également été ajoutées comme les menus contextuels, les info-bulles, le clic droit, le pointeur de déplacements et le suivi du pointeur. Des améliorations d’ordre plus général sont également à noter comme les nouveaux délégués utilisés dans le cycle de vie iOS ainsi que les mises à jour pour la Window classe permettant une gestion plus précise de la position de la fenêtre de l’application ainsi que le dimensionnement pour les versions de bureau.
MAUI bénéficie également des améliorations globales de .NET et gagne en efficacité pour faire défiler les CollectionViews, les calculs de mise en page, le temps de démarrage, le dimensionnement de l’application, la navigation entre les pages et bien plus.
Cloud Development/Containerization
Les conteneurs sont un type de technologie de virtualisation légère permettant à l’application de s’exécuter dans un environnement isolé, plus faciles à déployer et à gérer dans des systèmes différents. Ils sont devenus de plus en plus populaires dans le déploiement cloud car ils offrent portabilité et flexibilité, ce qui permet aux développeurs de plus facilement faire migrer leurs applications entre différents environnements ou fournisseurs de cloud.
Avec le lancement de .NET 7, Microsoft a facilité le déploiement des applications .NET dans des conteneurs sans avoir à utiliser Docker Desktop. Cela signifie que les développeurs peuvent désormais utiliser une simple interface de ligne de commande (ILC) pour personnaliser et déployer leurs conteneurs, quel que soit le temps de démarrage du conteneur qu’ils utilisent.
Microsoft offre désormais un support dans Visual Studio pour la publication des applications conteneurisées sur le registre de conteneurs Azure. Grâce à ce support, les développeurs peuvent facilement publier leurs images conteneur sur le registre de conteneurs Azure depuis Visual Studio.
De plus, avec la version .NET 7, Microsoft rend la vie des développeurs plus facile en ce qui concerne la configuration des flux de travail CI/CD via GitHub Actions. D’un simple clic droit dans Visual Studio, les développeurs peuvent créer un flux de travail GitHub Actions prédéfini pour la création, le test et le déploiement de leurs applications .NET.
Lorsqu’une application s’exécutant sur Azure rencontre un problème ou une erreur, Azure Monitor peut capturer un fichier de vidage contenant les informations sur l’état de l’application au moment de l’erreur. Ce fichier de vidage peut ensuite être analysé avec l’outil de diagnostic de Visual Studio afin d’identifier l’origine du problème. Enfin, il existe une multitude de façons d’héberger des apps de conteneurs dans Azure, chaque option présentant des avantages et étant adaptée à un cas de figure particulier. Azure App Service, Azure Kubernetes Service et Azure container Apps comptent parmi les façons les plus courantes d’héberger des apps de conteneurs dans Azure. Il s’agit d’une nouvelle offre de Microsoft permettant aux développeurs de déployer des applications conteneurisées directement sur Azure.
Conclusion
Faut-il passer à .NET 7 ?
.NET 7 n’est pas une version de support à long terme (LTS). Microsoft fournit généralement les versions LTS pour ses frameworks .NET tous les deux ans et qui s’accompagnent d’une extension de support jusqu’à trois ans. Ces versions LTS sont idéales pour les applications qui requièrent stabilité et support sur le long terme, car elles permettent de recevoir des correctifs de sécurité, des résolutions de bugs ainsi que des mises à jour critiques et ce, sur une durée prolongée.
En comparaison, les versions non-LTS comme .NET 7 bénéficient généralement d’une période de support plus courte et sont destinées aux utilisateurs qui souhaitent profiter des dernières fonctionnalités et améliorations tout en acceptant la contrepartie d’une période de support plus courte.
Par conséquent, une entreprise doit peser les tenants et les aboutissants d’opter pour une version non-LTS telle que .NET 7. Si l’entreprise a besoin de support sur le long terme pour son application, il est probablement plus judicieux d’attendre la prochaine version LTS ou d’envisager un framework alternatif bénéficiant d’une période de support prolongée. Mais si la priorité repose sur les dernières fonctionnalités et perfectionnements, .NET 7 s’avère être un choix judicieux pour le projet de l’entreprise.
Autres ressources :
- Les nouveautés de Windows Forms dans .NET 7.0 – .NET Blog (microsoft.com)
- Lancement de .NET MAUI pour .NET 7 Disponibilité générale – .NET Blog (microsoft.com)
- Améliorations des performances .NET 7 dans .NET MAUI – .NET Blog (microsoft.com)