Blazor läuft auch auf dem Desktop in .NET 6 Preview 3

Die neue Vorschauversion von .NET 6 ermöglicht, Blazor-basierte Webanwendungen in WPF und Windows Forms einzubetten. Auch Hot Reloading ist nun implementiert.

In Pocket speichern vorlesen Druckansicht 6 Kommentare lesen

(Bild: pio3/Shutterstock.com)

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

Microsoft hat eine dritte Preview von .NET 6 veröffentlicht. In Verbindung mit dem zugehörigen SDK liefert das Unternehmen zwei neue NuGet-Pakete: Microsoft.AspNetCore.Components.WebView.WindowsForms und Microsoft.AspNetCore.Components.WebView.Wpf. Diese implementieren für Windows Forms beziehungsweise Windows Presentation Foundation (WPF) ein neues Steuerelement BlazorWebView, das erlaubt, eine Blazor-basierte Single-Page-Web- in eine Desktop-Anwendung zu integrieren. Die Blazor-Anwendung läuft dabei nicht in einem Webserver und auch nicht einer WebAssembly-VM, sondern im gleichen .NET-6-Prozess wie das Desktop-Programm; somit hat diese vollen Zugriff zu allen lokalen Ressourcen des Clients.

Eine Blazor-Webanwendung in Windows Forms hat vollen Zugriff auf das Dateisystem und andere Ressourcen des Windows-Betriebssystems.
Die Reise hin zu .NET 6

Betriebssystemvoraussetzung ist derzeit Windows das .NET 6 Preview 3 SDK und die Installation des WebView2-Steuerelements. Wenn dieses fehlt, sieht man beim Start der Anwendung nur die Meldung "System cannot find the file specified" – ohne nähere Angaben zur fehlenden Datei. Wer nicht Visual Studio Code, sondern das "große" Visual Studio verwenden will, braucht die Version 16.10 Preview 1.

Microsoft hatte schon im September 2019 angekündigt, das .NET-basierte Single-Page-Web-App-Framework Blazor auch als Hybridlösung in Desktop-Anwendungen anzubieten und damals zwei Prototypen in Verbindung mit GitHubs Electron und als reine .NET-Anwendung bereitgestellt. Die reine .NET-Anwendung soll nun unter dem Titel "Blazor Desktop" Bestandteil von .NET 6 werden.

Microsoft will Blazor Desktop dabei nicht auf Windows beschränken, sondern in kommenden Vorschauversionen auch eine Integration von Blazor in das Cross-Platform-UI-Framework .NET .NET Multi-Platform App UI (MAUI) (s. Meldung zu Preview 2), den Nachfolger von Xamarin.Forms, liefern.

Die dritte Vorschauversion bietet für Blazor und ASP.NET-Core-basierte Webanwendungen auch ein Hot Reloading zur Entwicklungszeit. Das Werkzeug dotnet watch, das bei Änderungen am Programmcode die Anwendung komplett neu übersetzt und neu gestartet hat, arbeitet nun inkrementell und daher schneller. Dabei wird auch der Zustand der Komponenten beibehalten, was die Entwicklungsarbeiten wesentlich flüssiger macht.

Beim Hot Reloading bleiben die Zustände der Komponenten nach eine Änderung an Layout und/oder Programmcode erhalten.

Entwickler können dennoch jederzeit mit der Tastenkombination Strg + R an der Konsole, die dotnet watch ausführt, einen vollständigen Neustart der Webanwendung erzwingen. Hinsichtlich der möglichen Änderungen am Code verweist Microsoft auf aka.ms/dotnet/hot-reload; diese Seite ist aber noch nicht auf dem aktuellen Stand, denn nicht alle dort genannten Änderungsmöglichkeiten sind bereits implementiert.

Weitere Verbesserungen in .NET 6 Preview 3 betreffen vor allem die Ausführungsgeschwindigkeit, zum Beispiel bei der Prüfung und beim Casting von Interfaces, der Handhabung von structs und im Just-in-Time-Compiler RyuJIT. Details dazu beschreibt ein Blogeintrag von .NET-Progammmanager Rich Lander.

Bei ASP.NET Core 6 Preview 3 wurde die Größe einiger JavaScript-Dateien erheblich reduziert. Der Razor Compiler wurde beschleunigt durch Verzicht auf getrennte Assemblies für die Razor-Oberflächen (Views, Pages und Components). Beim Deployment in den Webserver IIS steht auch in ASP.NET Core nun das Schattenkopieverfahren zur Verfügung, das es im klassischen ASP.NET gab; damit ist ein Austausch von Binärdateien auch möglich, wenn diese aktuell ins RAM geladen sind. Weitere Neuerungen in ASP.NET Core 6 Preview 3 dazu schildert Daniel Roth in einem separaten Blogeintrag.

(ane)