Lorsque le développement de .NET 7 a commencé, Microsoft a expliqué à la communauté que cette nouvelle version unifiera enfin tous les composants disparates des outils de développement .NET, permettant aux développeurs de créer tous les types d'applications - bureautiques, mobiles, Web et autres - sur la même bibliothèque de classes de base (BCL), le même moteur d'exécution et les mêmes compilateurs. C'était en fait l'objectif de .NET 5 - qui succède aux offres .NET Core - lorsqu'il a fait ses débuts en novembre 2020. Mais des problèmes de développement exacerbés par la pandémie n'ont pas permis d'atteindre cet objectif.
En effet, tous les éléments prévus n'ont pas été intégrés à .NET 5 et ont été reportés jusqu'à l'arrivée de .NET 6 en novembre 2021 en tant que version LTS (Long Term Support). Mais même à ce moment-là, l'effort d'unification global de Microsoft était incomplet, car certains composants, tels que .NET Multi-platform App UI (.NET MAUI), n'ont pas respecté le calendrier. .NET MAUI a depuis atteint la disponibilité générale, et l'unification complète est désormais attendue pour novembre. Lors de la célébration des 20 ans de .NET en février dernier, Microsoft a réitéré son intention d'unifier tous les composants du framework à partir de .NET 7.
« .NET 7 s'appuie sur la base établie par .NET 6, qui comprend un ensemble unifié de bibliothèques de base, de runtime et de SDK, une expérience de développement simplifiée et une productivité accrue des développeurs. Les principaux domaines d'intérêt de .NET 7 comprennent une meilleure prise en en charge des scénarios cloud native, des outils facilitant la mise à niveau des projets existants et la simplification de l'expérience du développeur en facilitant le travail avec les conteneurs », a écrit Jeremy Likness de l'équipe .NET à propos de cette version. En gros, .NET 7 vise à faciliter le développement d'applications cloud natives et la conteneurisation.
Dans le cadre de l'aperçu 7, Likness a déclaré mardi que l'équipe de développement s'est concentrée sur l'amélioration de System.LINQ, des permissions de fichiers Unix, des structures de bas niveau, de la génération de sources p/Invoke, de la génération de code et des websockets. Tous ces éléments spécifiques relèvent des conseils généraux fournis sur le site Themes of .NET. Voici ci-dessous les points forts de .NET 7 Preview 7 :
Commande simplifiée avec System.LINQ
System.Linq comprend maintenant de nouvelles méthodes, Order et OrderDescending, qui sont utilisées pour commander un IEnumerable en fonction de T. IQueryable supporte également ces méthodes maintenant.
Avant le changement
Auparavant, vous deviez appeler OrderBy/OrderByDescending en faisant référence à la valeur propre.
Code : | Sélectionner tout |
1 2 3 | var data = new[] { 2, 1, 3 }; var sorted = data.OrderBy(static e => e); var sortedDesc = data.OrderByDescending(static e => e); |
Après le changement
Maintenant, vous pouvez écrire :
Code : | Sélectionner tout |
1 2 3 | var data = new[] { 2, 1, 3 }; var sorted = data.Order(); var sortedDesc = data.OrderByDescending(); |
Prise en charge des modes de fichiers Unix
Auparavant, .NET ne disposait d'aucun support intégré pour l'obtention et la définition des autorisations de fichiers Unix, qui contrôlent les utilisateurs autorisés à lire, écrire et exécuter des fichiers et des répertoires. Il n'est pas toujours facile d'invoquer manuellement les syscalls, car certains sont exposés différemment selon les distributions. Par exemple, sur Ubuntu, vous pouvez avoir à pinvoke à __xstat, sur RedHat à stat, et ainsi de suite. Selon l'équipe, c'est la raison pour laquelle il est important de disposer d'une API .NET de première classe. Dans l'aperçu 7, l'équipe a introduit un nouveau type enum :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 | public enum UnixFileMode { None, OtherExecute, OtherWrite, OtherRead, GroupExecute, GroupWrite, GroupRead, UserExecute, UserWrite, UserRead, ... } |
Elle a également ajouté les API File.GetUnixFileMode et File.SetUnixFileMode qui permettent d'obtenir et de définir le mode de fichier sur un chemin ou un handle (descripteurs de fichiers). Ainsi qu'une nouvelle propriété sur FileInfo et DirectoryInfo nommée UnixFileMode. Il existe également une nouvelle surcharge de Directory.CreateDirectory et une nouvelle propriété sur FileStreamOptions pour vous permettre de créer un répertoire ou un fichier avec un mode particulier en une seule fois.
Selon l'équipe, lorsque vous les utilisez, umask est toujours appliqué, comme si vous aviez créé le répertoire ou le fichier dans votre Shell. Voici un exemple :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // Create a new directory with specific permissions Directory.CreateDirectory("myDirectory", UnixFileMode.UserRead | UnixFileMode.UserWrite | UnixFileMode.UserExecute); // Create a new file with specific permissions FileStreamOptions options = new() { Access = FileAccess.Write, Mode = FileMode.Create, UnixCreateMode = UnixFileMode.UserRead | UnixFileMode.UserWrite, }; using FileStream myFile = new FileStream("myFile", options); // Get the mode of an existing file UnixFileMode mode = File.GetUnixFileMode("myFile"); // Set the mode of an existing file File.SetUnixFileMode("myFile", UnixFileMode.UserRead | UnixFileMode.UserWrite | UnixFileMode.UserExecute); |
Améliorations des structures de bas niveau : prise en charge du champ ref
Les moteurs d'exécution .NET 7 prennent désormais pleinement en charge les champs ref dans les types ByRefLike (c'est-à-dire les structures ref). Grâce à cette fonctionnalité, les types qui nécessitaient auparavant une gestion spécialisée dans les moteurs d'exécution (par exemple, Span<T> et ReadOnlySpan<T>) peuvent désormais être entièrement implémentés en C#.
Générateur de sources LibraryImport P/Invoke
Le générateur de sources LibraryImport est désormais disponible de manière supportée pour tous les utilisateurs. Fruit de plus de 18 mois de travail, ce générateur de sources est conçu pour remplacer directement la majorité des utilisations de DllImport, tant dans le produit d'exécution que dans le code utilisateur. L'équipe indique que les bibliothèques .NET ont toutes adopté LibraryImport et sont livrées avec du code de marshalling généré par les sources depuis .NET 7 Preview 1.
Le générateur source est livré avec le TFM (target framework moniker) .NET 7 et est facilement disponible pour la consommation. Pour bénéficier de la mise en correspondance générée par les sources, remplacez l'utilisation de DllImport par LibraryImport. Il existe des analyseurs et des correcteurs qui peuvent vous aider dans ce processus. Voici un exemple :
Avant la prise en charge de LibraryImport
Code : | Sélectionner tout |
1 2 3 4 5 | public static class Native { [DllImport(nameof(Native), CharSet = CharSet.Unicode)] public extern static string ToLower(string str); } |
Avec la prise en charge de LibraryImport
Code : | Sélectionner tout |
1 2 3 4 5 | public static class Native { [LibraryImport(nameof(Native), StringMarshalling = StringMarshalling.Utf16)] public static partial string ToLower(string str); } |
L'équipe a indiqué qu'il existe un analyseur et un correcteur de code pour convertir automatiquement vos attributs DllImport en LibraryImport. Pour l'aperçu 7, il s'agit d'un opt-in. Ajoutez dotnet_diagnostic.SYSLIB1054.severity = suggestion à votre fichier EditorConfig pour activer l'analyseur de conversion en tant que diagnostic.
Amélioration du comportement de ClientWebSocket
Auparavant, ClientWebSocket ne fournissait aucun détail sur la réponse de mise à niveau. Cependant, les informations sur les en-têtes de réponse et le code d'état peuvent être importantes dans les scénarios d'échec et de réussite. En cas d'échec, le code d'état peut aider à faire la distinction entre les erreurs récupérables et non récupérables (le serveur ne prend pas du tout en charge les websockets ou il s'agit simplement d'une petite erreur transitoire).
Les en-têtes peuvent aussi contenir des informations supplémentaires sur la manière de gérer la situation. Les en-têtes sont également utiles même en cas de connexion réussie d'un websocket. ils peuvent contenir un jeton lié à une session, des informations relatives à la version du sous-protocole, etc.
Support
.NET 7 est une version de support à court terme (Short Term Support - STS), ce qui signifie qu'elle bénéficiera d'un support et de correctifs gratuits pendant 18 mois à compter de sa date de sortie. L'équipe indique que la qualité de toutes les versions est la même. La seule différence est la durée de l'assistance. Enfin, l'équipe explique que .NET 7 Preview 7 a été testé avec Visual Studio 17.4 Preview 1.
Elle recommande d'utiliser les builds du canal preview si vous voulez essayer .NET 7 avec les produits de la famille Visual Studio. Si vous êtes sur macOS, elle recommande d'utiliser la dernière version de Visual Studio 2022 pour Mac. Microsoft prévoit de lancer .NET 7 lors d'un événement qui se tiendra du 8 au 10 novembre 2022.
Source : .NET 7 Preview 7
Et vous ?
Que pensez-vous des nouveautés et améliorations introduites par .NET 7 Preview 7 ?
Voir aussi
Microsoft annonce .NET 7 Preview 6, la version du framework pour la création des applications, améliore les convertisseurs de type, personnalise des contrats JSON
Microsoft annonce .NET 7 Preview 4, la version du framework pour la création des applications, elle corrige les bogues et comprend des MAJ
Microsoft annonce .NET 7 Preview 3, la version du framework pour la création des applications, apporte une amélioration du temps de démarrage avec la fonction Write-Xor-Execute activée de 10 à 15 %
Microsoft publie le premier aperçu de .NET 7 avec des optimisations continues du compilateur JIT, de nouvelles API et la prise en charge de plus de scénarios de rechargement à chaud
Microsoft célèbre les 20 ans de .NET, son Framework de développement, les dépôts .NET seraient dans le top 30 des projets open source à plus haute vélocité sur GitHub depuis 2017