Blazor Desktop

Eintrag zuletzt aktualisiert am: 10.04.2021


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). Da MAUI zunächst bei den Desktop-Betriebssystemen nur Windows und macOS unterstützt, sieht man in der folgenden Abbildung von Microsoft kein Linux. Android und iOS werden zwar von MAUI unterstützt, sind aber erstmal nicht von Blazor Desktop abgedeckt. Es soll aber möglich sein, im Rahmen der Blazor Mobile Bindings auch HTML-Inhalte von Blazor darzustellen.

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.