Was ist neu in Microsoft .NET 5?

Microsofts zweiter Release-Kandidat für .NET 5 kam am 13. Oktober an und brachte die Fusion von .NET Framework und .NET Core der Fertigstellung einen Schritt näher. Die neue einheitliche .NET-Plattform wird voraussichtlich am 10. November 2020 allgemein verfügbar sein. 

Microsoft beschreibt Release Candidate 2 als nahezu endgültige Version und als letzte von zwei RCs. Ein erster RC wurde am 13. September veröffentlicht. Der .NET 5.0-Release-Kandidat kann von dotnet.microsoft.com heruntergeladen werden.

Zu den allgemeinen Zielen von .NET 5 gehört die Bereitstellung einer einheitlichen .NET SDK-Erfahrung mit einer einzigen BCL (Basisklassenbibliothek) für alle .NET 5-Anwendungen und Unterstützung für native und Webanwendungen für mehrere Betriebssysteme. Ein einzelnes natives .NET 5-Anwendungsprojekt würde Ziele wie Windows, Microsoft Duo (Android) und Apple iOS unterstützen, die native Steuerelemente auf diesen Plattformen verwenden.

Weitere Ziele von .NET 5 sind die Unterstützung für das Erstellen von Hochleistungs-Cloud-Anwendungen, schnellere Algorithmen in der BCL, eine bessere Unterstützung für Container zur Laufzeit und die Unterstützung für HTTP3. .NET 5.0 unterstützt das WebAssembly-Binärformat über die Mono-Laufzeit- und .NET-Bibliotheken. Eine Reihe von nullbaren Anmerkungen zum Referenztyp ist ebenfalls enthalten.

.NET 5 verspricht außerdem, Entwicklern das automatische Auffinden latenter Fehler im Code zu ermöglichen. Weitere neue Funktionen sind der HalfTyp, ein binärer Gleitkomma, der 16 Bit belegt, und das Trimmen von Baugruppen, mit dem nicht verwendete Baugruppen gekürzt werden, um die Größe von Anwendungen zu verringern. Das benutzerdefinierte Trimmen wird ebenfalls hervorgehoben. Der neue Mustervergleich in C # 9 umfasst relationale, logische und einfache Muster. Die ClickOnce-Bereitstellungsoption wird jetzt für .NET 5.0-Windows-Apps und .NET Core 3.1-Apps unterstützt.

Die neue .NET-Plattform verspricht auch Leistungsverbesserungen. Ein Bulletin zu Preview 7, das am 21. Juli eingetroffen ist, bestätigt etwa 250 leistungsorientierte Pull-Anforderungen in .NET 5 und stellt fest, dass eine angenehme Überraschung für diejenigen auf Lager ist, die die .NET Core-Leistung verfolgt haben. 

Weitere Ergänzungen und Verbesserungen im Bulletin .NET 5 Preview 7:

  • Die neue JSON-API System.text.json bietet die Möglichkeit, Standardwerte für Werttyp-Eigenschaften bei der Serialisierung zu ignorieren. Dies ist nützlich, um die Serialisierung und die Kabelkosten zu senken. Dies ist eine bahnbrechende Veränderung. Für System.text.json wurde außerdem die Möglichkeit hinzugefügt, bei der Serialisierung mit Zirkelverweisen umzugehen, wobei die API-Form nun als endgültig erwartet wird.
  • Die Garbage Collection stellt jetzt mithilfe der GetGCMemoryInfoMethode, die eine GCMemoryInfoStruktur zurückgibt, detaillierte Daten zur neuesten Sammlung bereit. GCMemoryInfoliefert Informationen zum Maschinen- und Heapspeicher und zur neuesten Sammlung oder zur neuesten Sammlung der angegebenen Art von GC - kurzlebig, vollständige Blockierung oder Hintergrund. Die wahrscheinlichsten Anwendungsfälle für diese API sind die Protokollierung / Überwachung oder die Anzeige eines Load Balancers, dass ein Computer aus der Rotation genommen werden sollte, um einen vollständigen GC anzufordern. In der Zwischenzeit wurde eine weitere GC-Änderung vorgenommen, um die teure Rücksetzspeicheroperation auf Situationen mit wenig Speicher zu verschieben.
  • Ryujit, der Assemblycode-Generator für .NET, bietet Verbesserungen, die von der Beseitigung einiger Grenzprüfungen über die Verbesserung der Endduplizierung bis hin zur Verbesserung der Entfernung redundanter Null-Inits reichen. In Ryujit werden auch ARM64-Hardware-Eigenschaften und API-Optimierung vorgestellt.

In .NET 5 Preview 6, veröffentlicht am 25. Juni, wurde die integrierte Unterstützung für WinRT (Windows Runtime), eine Sammlung von APIs zum Erstellen universeller Windows Platform-Anwendungen, entfernt. Dies ist eine bahnbrechende Veränderung; .NET Core 3.x-Apps, die WinRT verwenden, müssen neu kompiliert werden. Die .NET- und Windows-Teams haben daran gearbeitet, die Funktionsweise von WinRT unter Windows zu ändern und die WinRT-Unterstützung durch die C # / WinRT-Toolchain in .NET 5 zu ersetzen. C # / WinRT ist ein NuGet-Toolkit, das WinRT-Projektionsunterstützung für C # bietet.

Weitere Änderungen in .NET 5 Preview 6: 

  • Das .NET 5 Preview 6 SDK unterstützt Windows Forms auf Windows ARM64-Geräten. Die Unterstützung für Windows Presentation Foundation unter Windows ARM64 wird fortgesetzt.
  • Die Verbesserungen der RyuJIT-Codequalität umfassen die Strukturbehandlung und -optimierung, um redundante Nullinitialisierungen zu entfernen. Darüber hinaus wurden Fortschritte bei der Optimierung der ARM64-Hardwareeigenschaften sowie bei der Verbesserung des generierten Codes für ARM64 erzielt, wobei die Codegröße reduziert wurde.
  • Plattform-Support-Pläne wurden aktualisiert.

.NET 5 Preview 5, veröffentlicht am 10. Juni, enthält die folgenden neuen Funktionen:

  • Der RyuJIT JIT-Compiler verfügt über eine schnellere, portable Implementierung von Tailcall-Helfern. Die JIT bittet die Laufzeit um Hilfe, wenn sie feststellt, dass sie einen Helfer benötigt, um einen Tailcall durchzuführen. Auch für RyuJIT wurden weitere Fortschritte bei der Implementierung der ARM64-Hardware-Intrinsics erzielt. Weitere Verbesserungen des RyuJIT betreffen eine höhere Geschwindigkeit in einem Fall, der die Kompilierung regulärer Ausdrücke und eine verbesserte Leistung der Intel-Architektur beeinträchtigte.
  • Exporte für native Binärdateien mit Aufrufen in .NET-Code wurden aktiviert. Der Baustein dieser Funktion ist das Hosting der API-Unterstützung für UnManagedCallersOnlyAttribute. Das native Exportprojekt ermöglicht das Anzeigen benutzerdefinierter nativer Exporte. Es erfordert keine übergeordnete Interop-Technologie wie COM und ist plattformübergreifend.
  • DirectoryServices.Protocols Die Unterstützung wird auf Linux und MacOS erweitert.
  • Die Alpine 3.12 Linux Distribution wird jetzt unterstützt.

Der .NET 5.0-Release-Kandidat kann von dot.net.microsoft.com heruntergeladen werden.

In .NET 5 Preview 4, das am 19. Mai veröffentlicht wurde, wurden die folgenden neuen Funktionen eingeführt:

  • Sprachunterstützung für C # 9 und F # 5.
  • Verbesserte Leistung der von F # verwendeten Tailcalls.
  • Verbesserte Leistung von ToUpperInvariant, string.ToLowerInvariantund die damit verbundenen Muster.
  • Verbesserte Leistung von HTTP 1.1 und HTTP 2.
  • Ein verbesserter Anrufzählmechanismus.
  • Dynamische Erweiterung des internen generischen Wörterbuchs, um Leistungsklippen zu beseitigen, die von generischem Code betroffen sind.
  • Ein angehefteter Objektheap, um die Heapfragmentierung zu reduzieren.
  • Einzeldateianwendungen, die auf einem neuen Veröffentlichungstyp für einzelne Dateien basieren, der eine Anwendung aus einer einzelnen Binärdatei ausführt.

Zu den Verbesserungen in .NET 5 Preview 3, die am 23. April vorgestellt wurden, gehören: 

  • Die BitArray-Klasse zum Verwalten eines Arrays von Bitwerten wurde aktualisiert und enthält nun eine hardwarebeschleunigte Implementierung für ARM64 unter Verwendung von ARM64-Intrinsics. Laut Microsoft sind die Leistungsverbesserungen von BitArray erheblich. Darüber hinaus wurde On Stack Replacement (OSR) in der CLR implementiert, damit Code, der von aktuell ausgeführten Methoden ausgeführt wird, während der Methodenausführung geändert werden kann, während diese Methoden "on Stack" aktiv sind. Diese Funktion zur Verbesserung der Leistungsmerkmale der gestuften Kompilierung ist jetzt eine experimentelle Opt-In-Funktion für x64. Eine weitere Verbesserung für RyuJIT verbessert die Codequalität für Strukturen als Argumente in Positionsaufrufen für "Tail Call". RyuJIT wird voraussichtlich auch eine bessere Leistung von Generika bieten. 
  • System.Txt.Json wurde um die Unterstützung für das Beibehalten von Referenzen erweitert, wodurch die Behandlung von Referenzschleifen für die JSON-Serialisierung ermöglicht wird. Außerdem werden jetzt unveränderliche Klassen und Strukturen für JsonSerializer unterstützt. Jetzt wird auch die Behandlung von Nullwerten unterstützt.
  • Das .NET SDK verweist jetzt automatisch auf das NuGet-Paket NETFramework.ReferenceAssemblies, wenn ein .NET Framework-Zielframework in einer Projektdatei angegeben ist. Diese Änderung ermöglicht das Erstellen von .NET Framework-Projekten auf einem Computer ohne installiertes .NET Framework-Targeting-Pack. Diese Verbesserung ist spezifisch für Targeting-Packs und berücksichtigt keine anderen möglichen Projektabhängigkeiten.

Spezifische Verbesserungen in .NET 5 Preview 2, veröffentlicht am 2. April, enthalten: 

  • An RyuJIT wurde eine Reihe von Änderungen vorgenommen, um die Qualität des generierten Maschinencodes zu verbessern. Dazu gehören doppelte Nullinitialisierungen, die aggressiver eliminiert werden, und nullbare Boxoptimierungen, die zuvor aufgerufen wurden.
  • Die Speicherbereinigung von Servern in verschiedenen Threads kann jetzt die Arbeit stehlen, während gen0 / 1-Objekte markiert werden, die von Objekten älterer Generationen live gehalten werden. Das Stehlen über Threads hinweg verkürzt kurzlebige GC-Pausen in Szenarien, in denen das Markieren einiger GC-Threads viel länger dauerte als andere. Darüber hinaus wurde ein Teil der POH-Funktion (Pinned Object Heap) implementiert, der Teil der Garbage Collection, damit der Collector angeheftete Objekte separat verwalten kann. Dies vermeidet die negativen Auswirkungen von angehefteten Objekten auf Generationshaufen.

Die am 16. März veröffentlichte Vorschau 1 enthielt Verbesserungen der Leistung regulärer Ausdrücke sowie Verbesserungen der Codequalität in RyuJIT.

.NET 5 soll im November 2020 als Produktionsversion veröffentlicht werden und Folgendes umfassen:

  • ASP.NET Core, ein Open Source-Framework für Webanwendungen.
  • Entity Framework Core-Datenzugriffstechnologie.
  • WinForms.
  • WPF (Windows Presentation Foundation).
  • Xamarin Mobile App Gerätemodell.
  • ML.NET.

Microsoft sagte, dass .NET 5 eine einzige, einheitliche Plattform zum Erstellen aller Arten von Anwendungen bieten wird. Das Unternehmen leitet die Hälfte des Datenverkehrs als Testfall mithilfe des Azure-Lastenausgleichs an eine .NET 5-Version weiter. 

Microsoft empfiehlt Entwicklern, neue Anwendungen mit .NET Core 3.1 zu erstellen und diese dann nach .NET 5 zu migrieren. Das Unternehmen stellte fest, dass .NET Framework-Anwendungen in .NET Framework verbleiben können, das so lange unterstützt wird, wie Windows selbst unterstützt wird.