.NET 9.0 (.NET 9)

Eintrag zuletzt aktualisiert am: 15.11.2024

.NET 9.0 ist der Nachfolger von .NET 8.0, der im November 2024 erscheinen soll.

Fakten zu .NET 8.0

Versionsgeschichte inkl. Vorabversionen

  • Preview 1 am 13.2.2024
  • Preview 2 am 12.3.2024
  • Preview 3 am 11.4.2024
  • Preview 4 am 21.5.2024
  • Preview 5 am 21.5.2024
  • Preview 6 am 09.07.2024
  • Preview 7 am 13.08.2024
  • Release Candidate 1 am 10.09.2024
  • Release Candidate 2 am 08.10.2024
  • Release to Manufacturing (RTM) am 12.11.2024

Neuerungen in der .NET 9.0 Runtime

Dass .NET beim Behandeln von Laufzeitfehlern langsam ist, ist seit vielen Jahren bekannt. Daher gehört die Vermeidung von Laufzeitfehlern zu den Best Practices. Insbesondere sollte man Laufzeitfehler nicht als Ersatz für Kontrollflussanweisungen verwenden, etwa um bei ungültigen Werten eine Schleife oder Unterroutine zu verlassen. Microsoft hat aber laut eigener Aussage in den Release Notes zur .NET Runtime die Behandlung von Laufzeitfehlern um den Faktor zwei bis vier gesteigert. Das gilt für Windows x64, Windows ARM64, Linux x64 und Linux ARM64, aber nicht für 32-Bit-Windows. Entwicklerinnen und Entwickler können via Umgebungsvariable
DOTNET_LegacyExceptionHandling = 1
oder Projektdateieinstellung
<RuntimeHostConfigurationOption Include="System.Runtime.LegacyExceptionHandling" Value="true" />
die Laufzeitumgebung dazu zwingen, das alte, langsamere Fehlerbehandlungsverfahren einzusetzen.

Neuerungen im .NET SDK

  • Ausweitung des NativeAOT-Compilers auf ASP.NET Core SignalR, WinUI3 sowie .NET MAUI mit iOS und macOS
  • Terminal Logger ist Standard in .NET SDK CLI-Befehlen und verbessert bei Umbrüchen + Ausgabe der Anzahl der Fehler und Warnungen am Ende
  • Parallelisierung in dotnet test bem Kompilieren für mehrere .NET-Versionen
  • Workload Sets (Alternative zu bisherigen "loose Manifests“) -> Nur passende Workloads werden installiert!
  • Workload-Geschichte: dotnet workload history
  • Entwicklungszertifikaten vertrauen in Chrome und Firefox auch auf Ubuntu und Fedora

dotnet dev-certs https --trust
  • Roll-Forward für .NET SDK-basierte Tools
  • NuGet-Sicherheitswarnungen bei dotnet restore im Standard auch für transitive Abhängigkeiten

Neuerungen bei den .NET-Basisklassen

  • Erzeugen einer GUID in Version 7 mit Timestamp: Guid.CreateVersion7()
  • Multiplikation großer Zahlen mit BigMul()
  • Vektorumwandlungen
  • Neue Mengenklasse OrderedDictionary<T,T>
  • Neue Mengenklasse ReadOnlySet<T>
  • Remove() in der PriorityQueue-Klasse
  • Neue Create()-Überladung in der SearchValues-Klasse für ganze Zeichenketten
  • EnumerateSplits() für reguläre Ausdrücke
  • Nutzung von System.ReadOnlySpan<T> in der Basisklassenbibliothek
  • LINQ-Erweiterungen: CountBy(), AggregateBy() und Index()
  • Mehr Genauigkeit für TimeSpan
  • Verbesserte Debugger-Ansicht für Dictionary-Klassen
  • Verbesserte Ausgabe bei Debug.Assert()
  • WhenEach() in System.Threading.Tasks.Task
  • Erweitere Einstellungen für die Komprimierung mit Zlib und Brotli
  • Persistierung dynamisch generierter Assemblies mit PersistedAssemblyBuilder
  • [UnsafeAccessorAttribute] erlaubt nun auch generische Parameter
  • Feature-Flags
  • Hybrider Cache
  • Verbesserung für den Source Generator für reguläre Ausdrücke
  • Binäre Serialisierung auf dem Abstellgleis
  • Implementierung des KECCAK Message Authentication Code (KMAC) des US-amerikanischen National Institute of Standards and Technology (NIST)
  • Neue Klasse System.Buffers.Text.Base64Url
  • Eine neue Klasse TypeName finden Entwicklerinnen und Entwickler im NuGet-Paket "System.Reflection.Metadata". Diese Klasse bietet ähnliche Funktionen wie System.Type, ist aber von der Laufzeitumgebung entkoppelt und funktioniert auch in älteren .NET-Versionen.
  • Die Komprimierungsklassen im Namensraum System.IO.Compression (z.B. ZipArchive, DeflateStream, GZipStream, ZLibStream) verwenden nun die neue Bibliothek Zlib-ng https://github.com/zlib-ng/zlib-ng statt der älteren Zlib.
  • Bei der Klasse TarEntry bietet .NET 9.0 nun die neue Eigenschaft DataOffset, die Entwicklerinnen und Entwicklern das Auslesen der Positionen des ersten Byte eines Eintrags im TAR-Archiv-Stream erlaubt. Das könnte laut Microsoft nützlich sein für Parallelzugriffe auf große TAR-Dateien.
  • Im neuen Namensraum System.Net.ServerSentEvents gibt es die Klasse für Server-Sent Events (SSE) zum Streaming vom Server zum Client als Alternativ zu Websockets.
  • Zudem stellt Microsoft in .NET 9.0 die neue Methode CreateUnboundedPrioritized<T> in der Klasse System.Threading.Channels bereit.
  • Die Verschlüsselungsverfahren AES-GCM und ChaChaPoly1305 funktionieren nun auch auf macOS Catalyst sowie iOS und tvOS (jeweils ab Version 13).
  • Zum Laden von X.509-Zertifikaten bietet Microsoft nun neben dem Laden per Konstruktor auch eine eigene Klasse X509CertificateLoader mit den statischen Methoden LoadSingleCertificate() und LoadCertificateCollection(). Auch ältere .NET-Versionen einschließlich dem klassischen .NET Framework können diese neue Klasse verwenden über das NuGet-Paket "Microsoft.Bcl.Cryptography".
  • XPS-Dokumente im Format XPS v4 können nun mit den Klassen im Namensraum System.IO.Packaging auch in .NET 9.0 geöffnet werden, da dort nun auch .piece-Dateien unterstützt werden.

Neuerungen in System.Text.Json (STJ)

siehe System.Text.Json

Neuerungen in Windows Forms in .NET 9.0

Neuerungen in WPF 9.0 in .NET 9.0

  • Windows 11 Look & Feel ("Fluent Design") mit PresentationFramework.Fluent/Fluent.xaml: Runde Ecken, Farben, Themes

Neuerungen in ASP.NET Core 9.0

siehe ASP.NET Core 9.0

Neuerungen in Blazor 9.0

siehe Blazor 9.0