Native Interoperabilität in der sechsten Vorschauversion von .NET 5.0

Die drittletzte Preview des modernen .NET setzt bei den Neuerungen den Schwerpunkt auf die Wiederbelebung von Windows Forms und Entity Framework Core.

In Pocket speichern vorlesen Druckansicht 19 Kommentare lesen
Microsoft

(Bild: dpa, Andrew Gombert)

Lesezeit: 6 Min.
Von
  • Dr. Holger Schwichtenberg
Inhaltsverzeichnis

Bei der Entwicklung von .NET 5.0 behält Microsoft die kurze Schlagzahl bei: Nur 15 Tage nach der fünften Vorschauversion gibt es die nächste Preview 6 von .NET 5, ASP.NET Core 5 und Entity Framework Core 5.

Seit der vierten Preview unterstützt das kommende .NET als Plattform auch Windows auf ARM64-Prozessoren. Bisher konnte man dort aber nur Konsolen- und Webanwendungen betreiben. Nun laufen auch Desktop-Anwendungen mit Windows Forms in dieser Konstellation. Die Unterstützung für Windows Presentation Foundation (WPF) ist aber weiterhin in Arbeit.

Auch die Steuerelemente des schon seit vielen Jahren totgesagten Windows Forms verbessert der Hersteller weiter. In der neuen Preview kann man beim Steuerelement ListView einzelne Gruppen zusammenklappen. Dafür gibt es nun die Eigenschaften Collapsible und Collapsed in der Klasse ListViewGroup. Zudem ist die Unterstützung für Windows-Forms-Anwendungen, die nur einmal laufen dürfen (Single Instance), nun auch in der modernen .NET-Welt möglich. Dazu ist weiterhin (auch für C#-Entwickler) die Assembly Microsoft.VisualBasic.dll mit der dortigen Klasse Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase mit der Eigenschaft IsSingleInstance notwendig. Microsoft hatte bei der Einführung von Windows Forms in .NET Core 3.0 diese Funktion nicht übernommen und holt dies nun nach, auch wenn die Übernahme von Programmcode aus dem alten .NET Framework in die neue Welt offiziell als abgeschlossen gilt.

Die bisher in die .NET-Core-/.NET-5.0-Laufzeitumgebung integrierte Unterstützung für den Aufruf von Windows Runtime APIs (WinRT) ist wie angekündigt in Preview 6 entfallen. An diese Stelle tritt nun das Wrapper-NuGet-Paket für WinRT mit Namen "Windows SDK .NET Package".

Microsoft arbeitet auch weiter an der Funktion "Single-File-Publish", die in .NET Core 3.0 erstmals eingeführt wurde und in einer Archivdatei sowohl die Anwendung als auch die notwendige .NET-Laufzeitumgebung in Form von DLLs enthält. Bis einschließlich .NET 5.0 Preview 4 wurden alle Dateien zunächst ins Dateisystem entpackt (C:\Users\xy\AppData\Local\Temp\.net\Anwendungsname). Seitdem realisiert der Hersteller, dass die Dateien auch aus dem Archiv direkt geladen werden können. Während in der Preview 5 unter Windows noch eine EXE und mehrere DLLs entstanden, kann man nun in Preview 6 wieder eine EXE- und eine PDB-Datei erreichen (Einstellung IncludeNativeLibrariesInSingleFile in der Projektdatei) beziehungsweise auch die PDB-Datei aufnehmen (IncludeSymbolsInSingleFile). Das alte Verhalten von .NET Core 3.x können Entwickler auf Wunsch mit der Einstellung IncludeAllContentInSingleFile reaktivieren.

Die Preview 6 von Entity Framework Core 5.0 bietet eine Reihe von Verbesserungen. Dazu gehört, dass Datenbankindizes für eine oder mehrere Spalten nun wieder mit der Annotation [Index] n der Entitätsklasse festgelegt werden können.. Das war im klassischen Entity Framework möglich, in Entity Framework Core mussten Entwickler dafür bisher die Fluent-API (HasIndex()) bemühen.

Als neuen Datentyp unterstützt Entity Framework Core nun die Klasse System.Net.IPAddress zur Speicherung von IP-Adressen im v4- und v6-Format. Diese persistiert der OR-Mapper in der Datenbank als Zeichenkette im Datentyp nvarchar(max).

Beim Eager Loading von in Beziehung stehenden Entitäten mit Include()können Softwareentwickler mit dem Zusatz .AsSplitQuery() in der LINQ-Abfrage nun vorgeben, dass Entity Framework Core keine JOIN-Operationen verwendet, sondern die beteiligten Datenbanktabellen einzeln abfragt und im RAM die Objekte verbindet. Das kann schneller sein, wenn die JOIN-Operation in der Datenbank aufwendig ist. In den Versionen 1.x und 2.x von Entity Framework Core hat der OR-Mapper selbst intern entschieden, komplexere Eager-Loading-Abfragen aufzubrechen. In Entity Framework Core 3.0 kehrte Microsoft zu dem aus dem klassisches Entity Framework bekannten Prinzip "Eine LINQ-Abfrage – ein SQL-Befehl" zurück. Nun in Entity Framework Core 5.0 bekommen Entwickler die sinnvolle Wahl zwischen beiden Optionen, um sich anhand des Leistungsverhaltens zu entscheiden.

Eine weitere neue Option ist der Parameter "NoOnConfiguring" bei den Kommandozeilenbefehl dotnet ef dbcontext scaffold und dem PowerShell-Commandlet Scaffold-DbContext. Damit erreichen Entwickler beim Reverse Engineering einer Datenbank, dass in der generierten Kontextklasse die Methode OnConfiguring() zur Festlegung von Datenbankprovider und Verbindungszeichenfolge nicht erzeugt wird. Das ergibt Sinn, wenn sie diese Methode bereits in einer partiellen Klasse realisiert haben.

Weitere Verbesserungen in der sechsten Preview umfassen die Fehlermeldungen, die Umsetzung von Bedingungen mit CASE in SQL-Abfragen, die Unterstützung der LINQ-Operation FirstOrDefault() für Zeichenketten sowie die explizite Festlegung von Transaction-IDs.

Entity Framework Core 5.0.0-preview.6.20312.4 basiert auf .NET Standard 2.1 und läuft daher nicht nur auf .NET Core 5.0, sondern auch auf .NET Core 3.0 und 3.1. Diese Kompatibilität will Microsoft vorerst beibehalten.

Das Webframework ASP.NET Core entwickelt sich im Gegensatz zu dem OR-Mapper derzeit nur in kleinen Schritten weiter. Neu in der sechsten Preview sind die Erweiterungsmethoden ReadFromJsonAsync()und WriteAsJsonAsync() für die Klassen HttpRequest und HttpResponse, die den neuen JSON-Serializer von Microsoft (System.Text.Json) ansteuern. Mit AllowAnonymous() können Entwickler schon bei der Routing-Konfiguration in Startup.Configure() anonymen Zugriff auf eine URL erlauben. Autorisierungsfehler kann man nun leichter über eine Klasse behandeln, die die neue Schnittstelle IAuthorizationMiddlewareResultHandler realisiert. Für SignalR Hubs sind Filter möglich, um Programmcode vor oder nach einer Hub-Methode auszuführen (z. B. für Protokollierung oder Fehlerbehandlung).

Microsoft hat angekündigt, dass man noch zwei weitere Preview-Versionen mit neuen Features veröffentlichen wird. Mit "Preview 8" sollen die neuen Funktionen dann vollständig sein; danach wird man den Feinschliff vornehmen. Die einsatzreife Version soll aber erst am 10. November 2020 im Rahmen der virtuellen Konferenz ".NET Conf 2020" erscheinen. (ane)