
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 | public static class Native { [LibraryImport(nameof(Native), StringMarshalling = StringMarshalling.Utf1 |
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.