.NET 9.0: Erste kleine Preview und schwammige Visionen

.NET 9.0 Preview 1 enthält nur kleinere Neuerungen. Microsoft verkündet aber parallel weitere, noch wenig konkrete Pläne für Cloud- und KI-Verbesserungen.

In Pocket speichern vorlesen Druckansicht 2 Kommentare lesen

(Bild: Pincasso/Shutterstock.com)

Lesezeit: 6 Min.
Von
  • Dr. Holger Schwichtenberg

Die erste Preview für die kommende .NET-Version 9.0 steht seit dem 13. Februar 2024 im .NET-Downloadbereich bei Microsoft bereit. Anders als in der Vergangenheit gibt es keinen Blogeintrag, der die Neuerungen vorstellt. Dies ist Teil einer seit diesem Jahr veränderten Strategie bezüglich des .NET-Blogs. Er soll sich laut einer Ankündigung von .NET Program Manager Rich Lander auf Beiträge über stabile Versionen von .NET konzentrieren.

Die Neuerungen in den Preview-Versionen will man nun primär über einen neuen Diskussionsbereich auf GitHub verkünden. Zudem will das .NET-Entwicklungsteam den "What's New"-Bereich in der Dokumentation aktueller halten. Wie bisher soll es zudem Release Notes (wie zu .NET 9.0 Preview 1) und eine kurze Ankündigung im Repository "dotnet/announcements" geben.

In die erste Vorschauversion von .NET 9.0 hat Microsoft nur kleinere Neuerungen gepackt. In der Basisklassenbibliothek gibt es die neuen LINQ-Operatoren CountBy() und AggregateBy(). Eine neue Remove()-Methode in der in .NET 6.0 eingeführten Mengenklasse PriorityQueue entfernt Elemente, auch wenn diese nicht an der Reihe sind. Beim Debugging von Dictionary-Klassen zeigen die Debugger nun die Inhalte deutlich übersichtlicher an:

Verbesserte Debugger-Ansicht von Dictionary-Klassen in .NET 9.0 Preview 1

(Bild: Microsoft)

Bei den kryptographischen Funktionen liefert Microsoft ab .NET 9.0 eine Implementierung des KECCAK Message Authentication Code (KMAC) des US-amerikanischen National Institute of Standards and Technology (NIST).

.NET 9.0 erlaubt nun auch wieder das Persistieren zur Laufzeit erzeugter Assemblies im Dateisystem mit der Methode Save() in der Klasse AssemblyBuilder. Diese Möglichkeit gab es schon im klassischen .NET Framework (vgl. Dokumentation zu Save()). Im modernen .NET konnte man bisher zur Laufzeit erzeugte Assemblies nur im RAM halten.

Die neueste Version der JSON-Bibliothek System.Text.Json erlaubt die Anpassung der Einrückung in den JsonSerializerOptions. Dazu gibt es dort neue Einstellungen IndentCharacter und IndentSize. Mit JsonSerializerOptions.Web können Entwicklerinnen und Entwickler nun auf einfache Weise dieselben Einstellungen für die JSON-Serialisierung und -Deserialisierung wählen, die in ASP.NET Core WebAPI voreingestellt ist.

In ASP.NET Core 9.0 Preview 1 ist Polymorphismus in ASP.NET Core SignalR Hubs möglich. Der objektrelationale Mapper Entity Framework Core hat Verbesserungen bei der Übersetzung von LINQ nach SQL implementiert. Bei der Übersetzung von Abfragen, die sich auf JSON-Spalten beziehen, werden nun bei OPENJSON…WITH keine nicht für die Bedingung oder die Ergebnismenge notwendigen Teile der JSON-Zeichenkette ausgewertet. Wenn das Zieldatenbanksystem ein Microsoft SQL Server in der neuesten Version 2022 ist, nutzt Entity Framework Core 9.0 nun die dort neu eingeführten T-SQL-Funktionen LEAST() und GREATEST() bei der Übersetzung von Math.Min() und Math.Max().

Mit den .NET-Funktionen EF.Parameter() und EF.Constant() können Entwicklerinnen und Entwickler nun erzwingen, dass bei der Übersetzung von LINQ nach SQL ein Wert in der SQL-Abfrage als Parameter beziehungsweise als Konstante übergeben wird. Bisher lag die Entscheidung für die Parametrisierung allein beim objektrelationalen Mapper. Nun ist dies beeinflussbar in Hinblick auf die Optimierung der Nutzung des Query Cache des Datenbankmanagementsystems.

EF.Constant() ist auch als ein Nachtrag zu .NET 8.0 verfügbar, der in Version 8.0.2 erschienen ist. Dies ist ungewöhnlich, da Microsoft behauptet, bei dem modernen .NET dem Semantic Versioning zu folgen, das bei neuen Funktionen eine Änderung der Versionsnummer an der zweiten Stelle vorsieht.

Die Methode ExecuteUpdate() bietet nun eine verkürzte Syntax in Verbindung mit komplexen Typen:

var newAddress = new Address("www.IT-Visions.de", 45257, "Essen");
await context.Stores
    .Where(e => e.Region == "Germany")
    .ExecuteUpdateAsync(s => s.SetProperty(b => b.ShippingAddress, newAddress));

Die Umwandlung einer normalen Tabelle in eine temporäre Tabelle ist nun mit einer stark verkürzten Befehlsfolge in den Schemamigrationen möglich.

Microsoft hat im .NET-Blog nicht die Neuerungen in .NET 9.0 Preview 1 beschrieben, sondern aus der Vogelflugperspektive einen Überblick über die Pläne für .NET 9.0 gegeben. Übergeordnete Ziele für .NET 9.0 sind demnach – wenig überraschend – Verbesserungen für Cloud- und KI-Anwendungen. Wie zuvor angekündigt, will Microsoft den Ahead-of-Time-Compiler, der bisher nur mit Konsolenanwendungen, Minimal WebAPIs, gRPC-Diensten und Worker Services funktioniert, auf weitere Anwendungstypen ausweiten, wobei der Blogeintrag offen lässt, welche Anwendungstypen dies sein werden. Noch schwammiger sind die Aussagen im Bereich KI: Man will es einfacher machen, KI-Funktionen in eigene Anwendungen zu integrieren und dabei Dienste von OpenAI und Azure zu nutzen.

Der Blogbeitrag verlinkt auch auf eine GitHub-Seite ".NET 9 Project Backlog", die allerdings noch wenig enthält. Zu Entity Framework Core findet man nur ein "Coming soon". Das Projektbacklog zu "Visual Basic" verlinkt auf ein Repository "Visual Basic .NET Language Design", in dem es den letzten Eintrag vor rund zwei Jahren gab. Einige konkrete Pläne findet man aber zur C#-Sprachsyntax sowie ASP.NET Core und Blazor.

Bei Blazor will Microsoft eine Möglichkeit einbauen, auf einfache Weise den aktuellen Render-Modus abzufragen, was bisher nicht direkt möglich ist. Die in Blazor WebAssembly zwar seit .NET 7.0 vorhandene, aber lückenhafte Unterstützung für echtes Multithreading soll verbessert werden. In der Projektvorlage "Blazor Web App" will Microsoft die in .NET 8.0 fehlende Authentifizierung mit der Microsoft Identity Platform (etwa zur Authentifizierung gegen EntraID, ehemals Azure Active Directory) nachrüsten.

Das Cross-Platform-UI-Framework .NET MAUI soll eine Interoperabilität zur auf Apple-Betriebssystemen zunehmend beliebten Programmiersprache Swift erhalten. Außerdem sollen Entwicklerinnen und Entwickler auf Desktop-Betriebssystemen die Gestaltung des Cursors anpassen können.

(mai)