.NET 9.0 bringt Breaking Changes und neue KI-Bibliothek
Microsoft hat die fertige Version von .NET 9.0 und Visual Studio 2022 Version 17.12 übergeben und eine neue KI-Bibliothek für .NET veröffentlicht.
- Dr. Holger Schwichtenberg
Die produktionsreife Version von .NET 9.0 steht nun auf der Downloadseite kostenfrei zur Verfügung. Für .NET 9.0 benötigen Entwicklerinnen und Entwickler die Entwicklungsumgebung Visual Studio 2022 mindestens in der Version 17.12, das ebenfalls als produktionsreif gilt.
Während die im November 2023 erschienene Version 8.0 insgesamt 36 Monate Long-Term Support (LTS) erhalten hat und daher noch bis zum November 2026 mit Updates versorgt wird, bietet Microsoft Aktualisierungen und technische Hilfe für .NET 9.0 als Standard-Term Support (STS) lediglich für die Dauer von 18 Monaten an, also bis Mai 2026.
Entity Framework Core 9.0 läuft auch auf .NET 8.0
Der Aufbau von .NET 9.0 ist der gleiche wie bei .NET 8.0 (siehe Abbildung 1): zahlreiche Anwendungsarten laufen auf Basis eines gemeinsamen Software Development Kit (SDK), einer gemeinsamen Basisklassenbibliothek, den Sprachen C#, F# und Visual Basic .NET sowie dem in (fast) allen Anwendungsarten verwendbaren objektrelationalen Mapper Entity Framework Core. Anders als bei der letzten Version funktioniert die aktuelle Entity-Framework-Core-Version 9.0 aber nicht nur mit der aktuellen .NET-Version 9.0, sondern auch mit dem Vorgänger .NET 8.0. Im Untergrund wirken weiterhin zwei verschiedene Runtimes, abhängig von Anwendungsart und Betriebssystem: die .NET Core Runtime und die Mono Runtime.
Wieder zahlreiche Breaking Changes
Umsteiger von älteren .NET-Versionen auf .NET 9.0 müssen nicht nur das Target Framework in der Projektdatei beziehungsweise zentralen Build-Konfigurationsdatei Directory.Build.props auf <TargetFramework>net9.0</TargetFramework>
ändern, sondern auch zahlreiche Breaking Changes berücksichtigen. Die Breaking Changes gegenüber .NET 8.0 dokumentiert Microsoft in Tabellen.
In der Online-Konferenz betterCode() .NET 9.0 am 19. November 2024 von iX und dpunkt.verlag präsentieren .NET-Experten von www.IT-Visions.de den fertigen Stand von .NET 9.0 anhand von Praxisbeispielen. Dazu zählen die Neuerungen in .NET 9.0 SDK, C# 13.0, ASP.NET Core 9.0, Blazor 9.0, Windows Forms 9.0, WPF 9.0, WinUI, .NET MAUI 9.0 und die Integration von Künstlicher Intelligenz in .NET-Anwendungen. Das Programm bietet sechs Vorträge, eine Diskussion und sechs Workshops.
Tickets sind über den Ticketshop der Konferenz-Website erhältlich.
Eine gravierende Ă„nderung ist der Entfall der Klasse BinaryFormatter
. Grund sind die bereits seit dem Jahr 2012 (der Black-Hat-Konferenz 2012) bekannten Sicherheitslücken in dieser Serialisierungsart. Microsoft hat einen eigenen BinaryFormatter Migration Guide veröffentlicht, in dem das Unternehmen eine Migration zu anderen Serialisierungsformaten wie XML, Message Pack und ProtoBuf empfiehlt. Entwicklerinnen und Entwickler, die ihren Programmcode nicht auf andere Serialisierungsformate migrieren wollen, können aber das NuGet-Paket System.Runtime.Serialization.Formatters einbinden und die binäre Serialisierung weiterhin verwenden. Zudem muss man dies in der Projektdatei setzen:
<PropertyGroup>
<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
</PropertyGroup>
FĂĽr Entity Framework Core und C# gibt es noch separate Listen von Breaking Changes:
- Breaking Changes in Entity Framework Core 9.0
- Breaking Changes in C# 13.0
.NET 9.0 läuft schneller
Microsoft hat wieder (wie in den letzten .NET-Versionen) zahlreiche Leistungsverbesserungen in .NET 9.0 eingebaut, zum Beispiel:
- schnellere Laufzeitfehler
- Inlining verbessert fĂĽr generische Methoden
- Optimierung von Schleifen im JIT
- Optimierung bei der Profile-Guided Optimization (PGO)
- deutliche Verringerung des Speicherbedarfs im Garbage Collector im Server-Modus
- Verbesserungen der AusfĂĽhrungszeit und Speicherallokation bei zahlreichen .NET-Basisklassen
Erläuterungen zu den Performance-Verbesserungen und genaue Zahlen findet man in einem sehr langen Dokument bei Microsoft DevBlogs.
Besonders stolz zeigt sich Microsoft ĂĽber die Einsparungen hinsichtlich des Speicherplatzes bei ASP.NET Core Minimal WebAPIs (siehe Abbildung 2).
Viele neue Funktionen
In .NET 9.0 gibt es viele neue Funktionen in allen Bereichen: bei der Programmiersprache C#, in der Basisklassenbibliothek, beim objektrelationalen Mapping mit Entity Framework Core, bei der JSON-Serialisierung mit System.Text.Json, den Webframeworks ASP.NET Core und Blazor sowie bei dem Cross-Platform-UI .NET MAUI. Auch bei den alten Windows-Desktop-Frameworks Windows Forms gibt es einzelne Verbesserungen.
heise Developer hatte ĂĽber die Neuerungen in .NET 9.0 jeweils anhand der Preview- und Release Candidate-Versionen berichtet:
- .NET 9.0: Erste kleine Preview und schwammige Visionen
- .NET 9.0 Preview 2: Kritik an Microsoft wegen der Kommunikation
- .NET 9.0 Preview 3: Vermischte Kleinigkeiten
- Microsoft veröffentlicht .NET 9.0 Preview 4
- .NET 9.0 Preview 5 liefert Verbesserungen fĂĽr Blazor
- .NET 9.0 Preview 6 bringt einige lang ersehnte Funktionen
- .NET 9.0 Preview 7: Neues fĂĽr AOT-Kompilierung und Cross-Plattform mit .NET MAUI
- Marginale Neuerungen in .NET 9.0 Release Candidate 1
- .NET 9.0 Release Candidate 2 ist reif fĂĽr den produktiven Einsatz
Gegenüber den in den obigen Beiträgen erwähnten Funktionen sind bis zur RTM-Version (Release to Manufacturing) noch folgende Punkte hinzugekommen:
- In System.Text.Json ist nun die Berücksichtigung verpflichtender Konstruktorparameter, Flexibilität bei der Position von Typ-Metadaten (
$type
), das Lesen von Multi-JSON-Dokumenten und die Anpassung der Serialisierung von Enumerationsmitgliedsnamen möglich. Zudem gibt es eine MethodeDeepEquals()
in der KlasseJsonElement
. - Das seit Langem bestehende Windows-Forms-Steuerelement
FolderBrowserDialog
erlaubt in .NET 9.0 die Mehrfachauswahl von Dateien. - Das
Control
-Steuerelement, von dem alle Steuerelemente in Windows Forms und auch das Formular als solches erben, besitzt eine MethodeInvokeAsync()
zur einfachen AusfĂĽhrung asynchroner Aufgaben. - Das .NET Multi-Platform App UI (.NET MAUI) bietet kompilierte Datenbindungen, die schneller sind und auch mit der NativeAOT-Kompilierung funktionieren.
- Das MAUI-Steuerelement
<TimePicker>
besitzt einTimeSelected
-Ereignis, das ausgelöst wird, wenn sich die ausgewählte Zeit ändert.
Enttäuschend ist das Ergebnis von Microsofts Arbeit an der AOT-Kompatibilität von Entity Framework Core. In Entity Framework Core 9.0 gibt es nur einen ersten kleinen Schritt Richtung AOT-Kompilierung: Nur statische LINQ-Abfragen lassen sich schon zur Entwicklungszeit vorkompilieren. Dazu nutzt Microsoft statische Codeanalyse und C#-Interceptoren. Microsoft sagt dazu selbst: "We encourage you to experiment with the current support and report on your experiences, but recommend against deploying EF NativeAOT applications in production."
Neue KI-Bibliothek Microsoft.Extensions.AI
Gleichzeitig mit dem Release von .NET 9.0 hat Microsoft eine neue KI-Bibliothek fĂĽr .NET angekĂĽndigt. Das neue NuGet-Paket Microsoft.Extensions.AI erlaubt .NET-Entwicklerinnen und -Entwicklern die vereinfachte Nutzung verschiedener KI-Dienste wie OpenAI, Azure AI, Ollama und von GitHub. Die Community kann eigene Modelle beisteuern (siehe Abbildung 3).
Entwicklerinnen und Entwickler sollen sich nicht an einen bestimmten Anbieter binden mĂĽssen, indem sie eine spezifische Bibliothek fĂĽr einen bestimmten KI-Dienst verwenden. Autoren von KI-Bibliotheken fordert Microsoft auf, die im Paket Microsoft.Extensions.AI.Abstractions definierten Schnittstellen wie IChatClient und IEmbeddingGenerator anzubieten. Die Bibliothek Microsoft.Extensions.AI und darauf aufsetzende Microsoft-Pakete wie Microsoft.Extensions.AI.AzureAIInference, Microsoft.Extensions.AI.OpenAI und Microsoft.Extensions.AI.Ollama bieten bereits Implementierungen fĂĽr diese Schnittstellen an.
Microsoft stellt auf GitHub zahlreiche Beispiele bereit.
(mdo)