Blazor Desktop

Eintrag zuletzt aktualisiert am: 24.05.2022


Microsoft hatte schon vor im September 2019 angekündigt, .NET-basierte Single-Page-Web-App-Framework Blazor auch als Hybridlösung in Desktopanwendungen anzubieten und damals bereits zwei Prototypen in Verbindung mit GitHub's Electron [https://aka.ms/blazorelectron] und als reine .NET-Lösung [https://aka.ms/webwindow] bereitgestellt. Die reine .NET-Lösung soll nun unter dem Titel "Blazor Desktop" Bestandteil von .NET 6 werden.

Seit Preview 3 [https://dotnet.microsoft.com/download/dotnet/6.0] liefert Microsoft zwei neue NuGet-Pakete: Microsoft.AspNetCore.Components.WebView.WindowsForms und Microsoft.AspNetCore.Components.WebView.Wpf. Diese implementieren für Windows Forms bzw. die Windows Presentation Foundation (WPF) ein neues Steuerelement BlazorWebView, welches erlaubt, eine Blazor-basierte Single-Page-Web-Anwendung 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 die Desktop-Anwendung; somit hat diese vollen Zugriff zu allen lokalen Ressourcen des Clients.

Systemvoraussetzung ist derzeit Windows als Betriebssystem, das .NET 6 Preview 3 SDK [https://dotnet.microsoft.com/download/dotnet/6.0] und die Installation des WebView2-Steuerelemennts (https://developer.microsoft.com/de-de/microsoft-edge/webview2/#download-section). Wenn dieses fehlt, sieht man beim Start der Anwendung nur die Meldung "System cannot find the file specified" – ohne nähere Angaben zu der fehlenden Datei. Wer nicht Visual Studio Code, sondern das große Visual Studio verwenden will, braucht davon die Version 16.10 Preview 1 [https://visualstudio.microsoft.com/de/vs/preview/].
Microsoft will Blazor Desktop dabei nicht beschränken auf Windows, sondern in kommenden Vorschauversionen eine auch Integration von Blazor in das Cross-Platform-UI-Framework .NET .NET Multi-Platform App UI (MAUI), den Nachfolger von Xamarin Forms, liefern (BlazorMauiWebView).

Hinweis: Der Code in Blazor Desktop-Komponenten läuft nativ auf dem Betriebssystem via .NET 6 CLR, nicht nicht via WebAssembly. Die HTML-Darstellung (ggf. Auch JavaScript-Ausführung) übernimmt ein WebView-Steuerelement. Die Kommunikation zwischen dem .NET Code im Host und dem WebView-Steuerelement übernimmt ein "Native Interop Channel". Hier kommt also weder ein WebAPI (wie bei Blazor WebAssembly) noch SignalR (wie bei Blazor Server) zum Einsatz.