Microsoft Connect() 2018: .NET Core & Co 2.2 sind fertig

Die Versionen 2.2 von .NET Core, ASP.NET Core und Entity Framework Core bringen nur wenige Neuerungen im Vergleich zum großen Schub von Version 2.1.

In Pocket speichern vorlesen Druckansicht 11 Kommentare lesen
Microsoft Connect() 2018: .NET Core & Co 2.2 sind fertig
Lesezeit: 5 Min.
Von
  • Dr. Holger Schwichtenberg
Inhaltsverzeichnis

Während die NuGet-Pakete bereits am Dienstag kurz nach Mitternacht deutscher Zeit verfügbar waren, folgte die offizielle Verkündigung, dass .NET Core 2.2 fertig ist, erst am Abend in der Keynote von Microsofts Online-Konferenz Connect(); 2018.

Die zunächst als wichtigste Neuerungen geplante "Tiered Compilation"-Strategie für den Just-In-Time-Compiler bleibt auch in .NET Core 2.2 (wie im Vorgänger 2.1) nur eine Option. Ursprünglich sollte die Funktion schon in .NET Core 2.1 im Produkt im Standard aktiv sein. Nun hat Microsoft sie mit den Worten "We decided that we were not quite ready to enable it by default in the final .NET Core 2.2 release" erneut nur als Option eingebaut. Während der bisherige JiT-Compiler jede Methode in Intermediate Language (IL) nur ein einziges Mal in Maschinencode übersetzt, kann der neue JIT-Compiler eine Methode hingegen mehrfach übersetzen. Er legt zunächst den Fokus auf schnelle Übersetzung statt auf optimalem Maschinencode. Häufiger verwendete Methoden können in einem Hintergrundprozess nachträglich optimiert werden, was zusätzliche Zeit in Anspruch nimmt.

Eingebaut in .NET Core 2.2 ist aber die Möglichkeit, dass ein Entwickler Runtime Events abfangen kann, die die Common Language Runtime (CLR) auslöst. Solche Ereignisse lösen der Garbage Collector (GC), der Just-in-Time-Compiler, die Thread-Verwaltung und die Interoperabilitätsschnittstellen aus. Ein Blogeintrag zeigt, wie man dazu eine Event-Listener-Klasse schreibt.

Der ADO.NET Provider für Microsoft SQL Server unterstützt nun neben der Windows-Authentifizierung und der SQL Server-eigenen Authentifizierung auch die Anmeldung mit einem von Microsoft Cloud-Dienst Azure Active Directory vergebenen Token.

.NET Core 2.2 unterstützt als Betriebssysteme neben Windows (ab Version 7 und Windows Server 2008 R2), macOS, RHEL, Fedora, Debian, SLES, openSuse, Ubuntu und Alpine Linux. Neu ist die Unterstützung für .NET Core auch auf ARM-Prozessoren, auf denen Windows IoT Core oder Windows Server 2019 Nanoserver laufen. Bisher konnten ARM-Prozessoren nur mit Linux-Betriebssystemen .NET Core verwenden. Diese Möglichkeit wird im erwähnten Blogeintrag erwähnt, erscheint aber noch nicht in der Tabelle auf GitHub

Von .NET Core 2.2 unterstützte Betriebssysteme

(Bild: GitHub )

Bereits in ASP.NET Core 2.1 hatte Microsoft die Swagger-Open-API-Unterstützung für REST-Dienste verbessert. In Version 2.2 gibt es neue Konventionen, mit denen Entwickler den Rückgabewert von REST-APIs besser beschreiben können. Microsoft liefert einige Standardkonventionen (DefaultApiConventions) und erlaubt das Schreiben eigener Konventionen. Analyzer in Visual Studio überwachen die Einhaltung der Konventionen.

Einige der bereits für ASP.NET 2.1 geplanten Funktionen hatte Microsoft auf die Version 2.2 verschoben. Dazu gehört die schnellere In-Prozess-Integration von ASP.NET Core in den Microsoft-Webserver Internet Information Services (IIS). Bisher werden alle Aufrufe von ASP.NET-Webseiten oder -Web-APIs vom IIS an einen externen Kestrel-Webserverprozess weitergeleitet. Zudem gibt es in Version 2.2 sowohl in Kestrel als auch im HttpClient endlich die Unterstützung für HTTP/2. Kestrel basiert seit Version 2.1 nicht mehr auf der Bibliothek libuv aus Node.js, sondern direkt auf den .NET-eigenen Socketklassen, die ebenfalls durch Span<T> beschleunigt wurden und den Kestrel performanter machen, als er in der Vergangenheit war.

In ASP.NET Core 2.2 wurde zudem das Routing-System überarbeitet und Microsoft liefert einen neuen Link-Generator. Zudem können Entwickler nun ASP.NET-Core-Webanwendungen um Endpunkte für Health Checks anreichern, mit dem externe Überwachungswerkzeuge prüfen können, ob die Anwendung betriebsbereit ist. Eine Integration mit BeatPulse ist möglich.

Für ASP.NET SignalR liefert Microsoft nun auch einen Java-Client. In Azure App Services ist ASP.NET Core derzeit noch nicht verfügbar; dies soll bis Ende Dezember erfolgen.

Entity Framework 2.2 bringt die Unterstützung für die Geo-Datentypen ("Spatial Types") im SQL Server zurück, die es im klassischen Entity Framework schon lange gibt. Microsoft setzt hierbei nun auf die Bibliothek NetTopologySuite. Diese Bibliothek kann auch in Verbindung mit den Datenbankmanagementsystemen SQLite und PostgreSQL sowie dem In-Memory-Provider für Unit-Tests zum Einsatz kommen.

Das zweite neue Feature betrifft abhängige Typen (Owned Types). Sie konnten bisher nur 1:1-Beziehungen besitzen. Nun erlaubt der OR-Mapper mit der Methode OwnMany() in der Fluent-API auch 1:n-Beziehungen. Ganz neu ist das dritte Feature, die Möglichkeit, LINQ-Abfragen per WithTag()-Methode mit Kommentartexten ("Query Tags") zu versehen, die man im Datenbankprofiler dann wiederfindet. Details zu diesen drei neuen Funktionen findet man in der Dokumentation.

Die geplante Unterstützung für das Reverse Engineering von Datenbank-Views in Query Types (DbQuery<T>) hat Microsoft auf die kommende Version 3.0 verschoben. Der schon für Version 2.1 geplante Datenbanktreiber für Azure CosmosDB ist weiterhin nicht fertig. Er verbleibt in der Preview-Phase, soll aber schon vor der Version 3.0 fertig werden.

Hier geht es zu den NuGet-Packages für .NET Core, ASP.NET Core und Entity Framework Core. (ane)