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 Web
API (wie bei
Blazor WebAssembly) noch SignalR (wie bei
Blazor Server) zum Einsatz.