Menü
Developer

Microsoft Connect() 2018: Erste Vorschauversion auf .NET Core 3.0

.NET Core 3.0 unterstützt nun auch Windows-Desktop-Anwendungen mit Windows Forms sowie WPF – allerdings nur unter Windows.

Von
vorlesen Drucken Kommentare lesen 16 Beiträge
Microsoft Connect() 2018: Erste Vorschauversion auf .NET Core 3.0

(Bild: Alexas_Fotos / Pixabay)

Die bisherigen Versionen 1.x und 2.x von .NET Core unterstützen nur Webanwendungen, Web API-/REST-Dienste, Konsolenanwendungen und die auf Windows 10 beschränkten "Windows Universal Apps". Klassische Desktop-Entwickler waren von dem modularen und performanteren .NET Core bisher ausgeschlossen.

Auf der Build-Konferenz im Mai 2018 hatte Microsoft dann angekündigt, dass Windows Presentation Foundation (WPF) und – überraschenderweise – sogar das noch ältere Windows Forms nebst dem alten OR-Mapper Entity Framework 6.2 auf .NET Core portiert werden. Bei der .NET Conf 2018 im September sah man dann eine Windows-Forms-Anwendung, die auf .NET Core deutlicher schneller lief als auf dem klassischen .NET Framework. Interessierte Nutzer konnten seit einigen Monaten auf Nigthly Builds zugreifen. Eine offizielle Preview-Version gibt es aber erst jetzt.

Nach der Installation des .NET Core 3.0 SDK legt der Softwareentwickler neue Anwendungen mit dotnet new wpf beziehungsweise dotnet new winforms an; über Visual Studio ist dies noch nicht möglich, da es dort noch keine passende Projektvorlage gibt. In der Projektdatei erkennt man das benötigte GUI-Framework ab dem Zusatz <UseWPF>true</UseWPF> beziehungsweise <UseWindowsForms>true</UseWindowsForms>. Beide Optionen können parallel gesetzt sein, wenn ein Projekt beide GUI-Frameworks verwendet. Notwendiges NuGet-Paket ist "Microsoft.WindowsDesktop.App", das sich als nicht als Preview, sondern als "Alpha"-Version versteht. .NET-Core-Projekte mit diesem Zusatz sind dann aber nicht mehr plattformunabhängig, das heißt, sie laufen nur auf Windows (ab Version 7 bzw. Windows Server 2018 R2).

Als Entwicklungsumgebung empfiehlt Microsoft die Verwendung von Visual Studio 2019 Preview 2. Mit Visual Studio 2017 Version 15.9 ist eine Bearbeitung aber auch möglich, wenn man die unter den .NET-Core-Optionen "Use previews of the .NET SDK" aktiviert. Die grafischen Designer von Visual Studio sind aber auch mit der 2019er-Version noch nicht für WPF- und Windows Forms auf .NET Core nutzbar.

Im Rahmen der Connect();-Konferenz hat Microsoft auch angekündigt, dass der Quellcode von Windows Forms und WPF nun Open Source ist, was aber keine Sensation ist, da .NET Core Open Source ist.

Eine "Hello World"-Windows-Forms-Anwendung läuft auf .NET Core 3.0 – einen grafischen Designer gibt es aber noch nicht.

In Hinblick auf Desktop-Anwendungen hat Microsoft nun die Strategie der Kompilierung angepasst: .NET Core 3.0 erzeugt jetzt für ausführbare Anwendungen im Standard eine .EXE-Datei. Bisher war das Ergebnis im Standard eine .DLL, die man mit dotnet.exe beziehungsweise dotnet (auf Linux und macOS) starten musste; nur bei Self-Contained Applications gab es direkt eine .EXE. Neu ist auch, dass alle NuGet-Paketabhängigkeiten schon im Rahmen des Build-Prozesses und nicht erst bei einem "Publish" in das Ausgabeverzeichnis kopiert werden.

Bei den Werkzeugen bietet Microsoft nun neben den in .NET Core 2.1 eingeführten globalen Werkzeugen auch lokale Werkzeuge.

Wie im Oktober 2018 angekündigt, verabschiedet sich Microsoft in .NET Core von der Nutzung des Open Source-Pakets Json.NET (Newtonsoft.Json) und liefert nun eine eigene JSON-Implementierung, die die direkte Speicherbearbeitung mit Span<T> unterstützt, was James Newton-King in sein Newtonsoft.Json nicht mehr einbauen will. In der ersten Preview von .NET Core 3.0 kann die neue Implementierung aber mit der Klasse Utf8JsonReader nur JSON-Dokumente lesen. Erst in kommenden Versionen gibt es dann auch Klassen zum Erzeugen und Verändern von JSON-Dokumenten sowie der Serialisierung und Deserialisierung von .NET-Objekten in das JSON-Format.

Eine weitere neue Klasse ist IAsyncEnumerable<T>, eine asynchrone Version der seit .NET Framework 2.0 im Jahr 2005 verfügbaren Aufzählungsschnittstelle IEnumerable<T>. Mit System.Buffers.SequenceReader gibt es eine neue schnelle Möglichkeit, auf die Datenstruktur ReadOnlySequence<T> zuzugreifen. Die in .NET vorhandenen Klassen für den Zugriff auf serielle Ports (System.IO.Ports) laufen nun auch auf Linux. Bei der Verschlüsselung hat Microsoft AES-GCM und AES-CCM ergänzt im Namensraum System.Security.Cryptography. Ein CancellationToken für den Umbruch von Tasks kann nun mit Unregister() zurückgezogen werden.

Mit der Klasse MetadataLoadContext können Entwickler nun auch in .NET Core Metadaten aus einer .NET-Assembly laden, ohne die Assembly selbst in der aktuellen Application Domain zum Aufruf verfügbar zu machen. Mit dem C#-Schlüsselwort interface deklarierte Schnittstellen können in .NET Core 3.0 Implementierungen von Methoden besitzen (vgl. Default Methods in Java). Die Tiered Compilation für den JIT-Compiler, die in .NET Core 2.1 und 2.2 nur eine Option ist, ist nun in .NET Core 3.0 im Standard aktiv.

Microsoft hatte bereits am 5. November angekündigt, dass einige dieser Klasse in den .NET Standard 2.1 eingehen werden, der aber nicht mehr auf dem alten .NET Framework, auch nicht in dessen kommender Version 4.8 verfügbar gemacht werden wird. Das heißt: Diese Klassen kann nur nutzen, wer .NET Core einsetzt.

Auch für das Webframework ASP.NET Core und den objektrelationalen Mapper Entity Framework Core findet man bereits eine Version 3.0 Preview 1 auf NuGet. Allerdings gibt es noch keine passenden Blogeinträge und auch in der Keynote der Connect();-Konferenz wurde nur ein Feature erwähnt: ASP.NET Core Razor Components.

Diese sind ein neues Modell für Single Page Web Applications, bei dem die Webanwendung wie beim klassischen Server Side Rendering auf dem Webserver läuft, der aber dann nicht ganze Seiten zum Browser sendet, sondern nur die jeweils aktualisierten Seitenteile. Etwas Ähnliches gab es bereits einmal in ASP.NET Webforms als "Update Panel". Das neue Modell basiert aber auf ASP.NET SignalR und war bisher als "Server Side Blazor" bekannt. (Holger Schwichtenberg) / (ane)