Microsoft Build 2020: Vierte Preview von .NET 5.0 und weitere Ausblicke

Microsoft hält am Veröffentlichungstermin von .NET 5.0 fest. Die COVID-19-Pandemie sorgt jedoch für eine Verschiebung einiger Funktion auf .NET 6.0.

Lesezeit: 3 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen

(Bild: Ken Wolter/Shutterstock.com)

Von
  • Dr. Holger Schwichtenberg

Nachdem im März und April in kurzer Folge drei Vorabversionen von .NET 5.0 nur mit kleineren Neuerungen erschienen sind, enthält nun die vierte Preview erstmals den neuen Sprachcompiler für C# 9.0 und F# 5.0. Eine neue Sprachversion von Visual Basic .NET ist nicht enthalten und auch nach den Ankündigungen zum Ende der Weiterentwicklung der Sprache aus dem März 2020 nicht zu erwarten.

News von der Build 2020

In den ersten drei Previews hatte die .NET-Nutzergemeinde die auf der Build 2019 angekündigte Integration von Mono und Xamarin vermisst. Auf der diesjährigen Auflage der Entwicklerkonferenz verkündete der Softwarehersteller nun, dass diese Integration auf .NET 6.0 im November 2021 vertagt wird. Dann wird der Name "Xamarin" entfallen. Aus Xamarin Android wird .NET for Android, aus Xamarin iOS wird .NET for iOS und Xamarin Forms heißt dann .NET Multi-Platform App UI (MAUI).

Auch die Integration der Universal Windows Platform (UWP) Apps und Unity wird nicht bis Ende 2020 fertig sein. Somit wird .NET 5.0 in der Gesamtsicht nicht mehr sein als die kommende Version von .NET Core. Microsoft spricht daher mittlerweile von der ".NET-5- bis-6-Welle" und "Reise zu einem .NET". Als Grund für die Verschiebungen verweisen Microsoft-Sprecher auf die COVID-19-Krise. Die Abbildung stellt die veränderte Planung in einer Grafik dar, wobei nach aktuellem Stand in .NET 6.0 zwar eine Klassenbibliothek ("One .NET Base Class Library") und ein Software Development Kit ("One SDK"), aber weiterhin zwei verschiedene Runtimes (die bisherige "Core" Runtime und die Mono Runtime) existieren werden.

Die im Rahmen von .NET Core 5.0 erschienene vierte Preview des objektrelationalen Mappers Entity Framework Core 5.0 enthält nur zwei Neuerungen: Entwickler können in der Fluent-API-Konfiguration der Kontextklasse nun die Genauigkeit für Dezimalzahlen mit HasPrecision() und den Füllfaktor für SQL-Server-Indizes mit HasFillFactor() angeben.

Das Webframework ASP.NET Core 5.0 enthält Leistungsverbesserungen bei HTTP/2 durch den Einsatz der Header-Komprimierung mit HPACK.

Weitere Leistungsverbesserungen hat Microsoft bei der Tiered Compilation, einigen Zeichenkettenoperationen und regulären Ausdrücken eingeführt. Bei der in .NET Core 3.0 eingeführten Tiered Compilation übersetzt der Just-in-Timer-Compiler "RyuJIT" die Intermediate Language (IL) zunächst sehr schnell in Machinencode und optimiert dann später nur für die häufig gerufene Methoden in einem weiteren Durchgang den generierten Maschinencode. Die dafür notwendige Zählung der Methodenaufrufe wurde in der Preview 4 optimiert.

Für Methoden mit Schleifen kann man die Umgebungsvariablen COMPlus_TC_OnStackReplacement und COMPlus_TC_QuickJitForLoops zur Steuerung der Tiered Compilation setzen. Die Namen verweisen tatsächlich auch im .NET-5.0-Zeitalter noch auf "COMPlus", den Vorgängernamen des klassisches .NET Framework aus dem letzten Jahrtausend.

Für die Festlegung des Zielframeworks im Projektdatei-Tag <TargetFramework> will Microsoft ein neues Konzept umsetzen. Während in .NET 5.0 Preview 3 noch eine Mischung aus "netcoreapp5.0" und "net5.0" zu sehen war, ist die Preview 4 komplett auf die kurze Schreibweise umgestellt. Der Target Framework Moniker wird zukünftig Zusätze für die Zielplattform erlauben, zum Beispiel net5.0-windows. Ab .NET 6.0 mit der Integration von Xamarin gibt es dann dementsprechend auch net6.0-ios und net6.0-android. Auch Betriebssystem-Versionsnummern sind möglich, etwa net6.0-android21. Im Programmcode können Entwickler dann mit #if-Direktiven Code für einzelne Plattformen schreiben.

Plattformspezifischer Programmcode in .NET 5.0/6.0

(Bild: Microsoft)

Das Konzept ".NET Standard" ist in einem einheitlichen .NET nicht mehr erforderlich. Bestehende, auf .NET Standard basierte DLLs sollen jedoch laut einem Blogeintrag von Scott Hunter "für immer" in .NET laufen. .NET Standard 2.0 wird in Visual Studio weiterhin als Projekttyp existieren, um gemeinsam nutzbare Bibliotheken zwischen dem klassisches .NET Framework und .NET Core/.NET zu erschaffen.

Microsoft hat .NET Core ursprünglich in vielen einzelnen NuGet-Paketen verbreitet, dann ab .NET Core 2.0 zur Vereinfachung aber alle wesentlichen Komponenten in das Setup des .NET Framework SDK integriert. Für .NET 5.0 und 6.0 will Microsoft das dann nur noch ".NET SDK" genannte Kit in "Workloads" aufbrechen, die man dann über das .NET-Kommandozeilenwerk (.NET CLI/dotnet.exe) einzeln installieren und aktualisieren können soll.

Bereits seit .NET Core 3.0 können Entwickler beim Befehl dotnet publish mit dem Parameter /p:PublishSingleFile=true erreichen, dass die ausführbare EXE-Datei zusammen mit allen benötigten DLLs in eine EXE verpackt wird. Bisher ist das aber nicht mehr als ein selbstextrahierendes Archiv, das beim ersten Start mit merklicher Verzögerung ausgepackt wird. In .NET 5.0 soll das Executable direkt ausführbar sein. Allerdings gibt Microsoft zu, das nach aktuellem Stand ein komplettes Zusammenpacken zu einer einzigen Datei nur unter Linux möglich sein wird. Unter Windows erzeugt das Werkzeug bisher vier zusätzliche Dateien und das Entwicklungsteam hat bisher noch keine technische Lösung, diese Zusatzdateien zu eliminieren.

Für .NET 5.0 hat Microsoft angekündigt, sowohl die Größe von .NET in Docker-Containern zu verringern als auch die Ausführungsgeschwindigkeit zu erhöhen. Die mit der Preview 4 gewonnene Reduzierung erläutert ein Blogeintrag.

Den bisher mit "November 2020" spezifizierten Erscheinungstermin für .NET 5.0 hat Microsoft konkretisiert auf den 10. November 2020. An diesem und den beiden folgenden Tagen wird der Softwarehersteller wieder eine ".NET Conf" als kostenfreie virtuelle Konferenz veranstalten. Bis dahin ist mit monatlich aktualisierten Previews zu rechnen. (ane)