.NET 5.0 ist erschienen

Seite 3: Runtime und Sprachen

Inhaltsverzeichnis

Wie schon in den verschiedenen .NET-Core-Versionen hat Microsoft auch in .NET 5.0 einige Arbeitszeit in die Leistungsoptimierung von Just-in-Time-Compiler, Garbage Collector und Basisklassenbibliothek investiert und meldet deutliche Erfolge.

.NET 5.0 enthält nun die Version 9.0 der Programmiersprache C# mit Records als kompakt deklarierbare, unveränderliche Datenstrukturen, einer verkürzten Schreibweise bei der Instanzierung, Modul-Initialisierungsfunktionen, Erweiterungen beim Pattern Matching und vielen anderen Neuerungen. Microsoft hat 80 Prozent der Klassenbibliotheks-APIs in .NET 5.0 mit Annotationen für die in C# 8.0 eingeführten Nullable Reference Types versehen.

Für Visual Basic .NET-Entwickler liefert Microsoft jetzt zwar auch Projektvorlagen zur Erstellung von WPF- und Windows-Forms-Anwendungen im .NET 5.0 SDK und in Visual Studio 2019 ab Version 16.8 mit, aber alle ASP.NET-Core-basierten Projektarten sind weiterhin nur mit C# und teilweise mit F# möglich (s. Abb. 3).

Projektvorlagen und zugehörige Programmiersprachen im .NET 5.0 SDK (Abb. 3)

Zur Problemdiagnose können Entwickler nun auch Dump-Dateien von .NET-Prozessen auf macOS erstellen und Linux-Dumps in Windows auswerten. Mit dem neuen .NET-SDK-basierten Kommandozeilenwerkzeug dotnet-runtimeinfo kann man sich Basisinformationen über das Betriebssystem und die aktuelle .NET-Version liefern lassen.

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 (einschließlich .NET-Runtime-Dateien) in eine EXE verpackt wird. Bisher war das aber nicht mehr als ein selbstextrahierendes Archiv, das beim ersten Start mit merklicher Verzögerung in das Temp-Verzeichnis der Benutzer ausgepackt wird. In .NET 5.0 ist der Code direkt aus dem Archiv startbar. Während in Unix-basierten Betriebssystemen tatsächlich eine Datei entsteht, sieht man unter Windows in der Ausgabe von dotnet publish einige zusätzliche native DLLs. Diese kann man mit der Option -p:IncludeNativeLibrariesForSelfExtract=true ebenfalls in die ausführbare Datei verpacken, wobei (wie der Optionsname schon sagt) diese dann beim ersten Start ausgepackt werden.

Für das auch schon in .NET Core 3.0 eingeführte Application Trimming im Rahmen von dotnet publish hat Microsoft in .NET 5.0 den neuen Modus <TrimMode>Link</TrimMode> eingeführt. Im Gegensatz zum bisherigen Vorgehen werden dabei nicht nur ungenutzte .NET-Assemblies, sondern per Tree Shaking auch ungenutzte Typen und einzelne Mitglieder entfernt. Das einige Zeit beanspruchende Trimming schaltet man wie bisher mit <PublishTrimmed>true</PublishTrimmed> ein; <TrimMode> copyused</TrimMode> ist dann weiterhin der Standard.

Außerdem kehrt in .NET 5.0 das Click-Once-Deployment zum Verbreiten und Aktualisieren von .NET-Anwendungen per Webserver und Netzwerklaufwerk zurück. Wie im klassischen .NET Framework kann jeder Windows-Benutzer auch ohne Administratorrechte eine per Click-Once verbreitete Anwendung im lokalen Benutzerverzeichnis installieren und später aktualisieren. Gegenüber dem Original-Click-Once-Deployment in .NET Framework gibt es allerdings Einschränkungen. So sind Programmaktualisierungen nur beim Anwendungsstart, nicht aber beim Beenden oder durch Benutzeraktion im Betrieb möglich.

Das Click-Once-Deployment gehörte ursprünglich zu den Techniken, die Microsoft nicht aus dem .NET Framework in die neue Welt übernehmen wollte. Die Übernahme von Funktionen aus dem klassischen .NET Framework ist offiziell seit dem 14. Oktober 2019 beendet; für das bei Kunden doch sehr beliebte Click-Once-Deployment hat Microsoft jedoch eine Ausnahme gemacht. Es gibt allerdings bisher keine Hinweise darauf, dass auch andere beerdigte Techniken ebenfalls noch zurückkehren werden.

Eine fundamentale Neuerung in .NET 5.0 ist die Möglichkeit, dass Entwickler nun .NET-Code direkt aus anderen Programmiersprachen auf nativem C/C++-Weg aufrufen können, was die meisten Programmiersprachen beherrschen. Somit sind .NET-5.0-Module nun fast in beliebige Sprachen einbindbar.

Die Interoperabilität zur mit Windows 8 eingeführten Windows Runtime Library (WinRT) ist nicht mehr Teil der .NET-5.0-Laufzeitumgebung, sondern wird durch ein NuGet-Paket angeboten. Das soll aus der Sicht von Microsoft nicht bedeuten, dass WinRT nicht mehr relevant sei. Vielmehr will man die Einwicklung der WinRT-Interoperabilität von der .NET-Versionierung entkoppeln.