Blazor Desktop
Eintrag zuletzt aktualisiert am: 19.02.2025
Blazor Desktop ist Teil von
Blazor Hybrid, was wieder ein Teil von
ASP.NET Core ist.
Mit
.NET 6.0 hatte Microsoft mit Blazor Desktop eine dritte Architektur in die Blazor-Familie eingeführt. Während bei
Blazor Server der C#-Programmcode auf einem
ASP.NET Core-fähigen
Webserver und bei
Blazor WebAssembly direkt in der WebAssembly Virtual Machine des Browsers läuft, ist bei Blazor Desktop der Host eine .NET-basierte Anwendung.
Als Host bei Blazor Desktop sind möglich:
Bei Blazor Desktop läuft die Blazor-Anwendung dabei nicht in einem
Webserver und auch nicht einer Webassembly-VM, sondern im gleichen .NET-Prozess und sogar im gleichen
Thread wie die Desktop- bzw. Mobil-Anwendung. Es gibt also keine Prozesstrennung wie bei
Electron und damit auch keine Notwendigkeit des expliziten Nachrichtenverkehrs. In
Blazor Server übernimmt die Kommunikation zwischen dem .NET Code im Host und dem WebView-
Steuerelement ein "Native Interop
Channel", dessen Arbeit für die Entwickler völlig unsichtbar ist. Alle .NET-
APIs können direkt aufgerufen werden. Bei Blazor Desktop kommt also weder ein Web
API (wie bei
Blazor WebAssembly) noch SignalR (wie bei
Blazor Server) zum Einsatz. Wie bei
Blazor Server hat der Programmcode in Blazor Desktop vollen Zugriff auf alle Ressourcen des Betriebssystems.
Blazor Desktop kann also auch
Datenbankmanagementsysteme direkt ansprechen – sofern das Betriebssystem dies unterstützt. Das ist in Windows möglich, auf
Android und
iOS aber nicht, weil es dort die passenden Treiber nicht gibt. Auf Mobilbetriebssystemen kann man nur lokale Datenbanken (meist
SQLite) ansprechen.
Bei Blazor Desktop ist also – abhängig vom Betriebssystem – eine 2-Tier-Anwendung ohne Application Server/
Middleware möglich; Geschäftslogik und
Datenzugriffsschicht können im Client-Prozess laufen. Eine 3-Tier-Anwendung mit
Middleware, also dem Datenzugriff via
Webservices auf einen Application Server, ist natürlich immer auch möglich.
Blazor Desktop verwendet das gleiche
Komponentenkonzept (
Razor Components mit oder ohne Code-Behind-Datei) wie
Blazor WebAssembly und
Blazor Server. Eine Umstellung einer Blazor-Anwendung auf Blazor Desktop ist also einfach, egal ob diese mit
Blazor WebAssembly (3-Tier) oder
Blazor Server (2- oder 3-Tier) realisiert wurde. Lediglich der Startcode und die Startseite sind leicht verschieden in den drei Blazor-Architekturen. Darüberhinausgehende technische Unterschiede werden durch
Dependency Injection unterschiedlicher Dienste weitgehend wegabstrahiert, z.B. für die Navigation und die Interoperabilität mit
JavaScript.
In Blazor Desktop übernimmt die von Microsoft bereitgestellte
JavaScript-Bibliothek blazor.webview.js die Weitergabe der Browser-Interaktionen an die
Razor Component in Blazor sowie die Aktualisierung des
HTML-DOM im Browser. Eine Blazor Desktop-Anwendung kann beliebig viele native Fenster umfassen, in die Blazor-Anwendungen via WebView eingebettet sind.
ProgrammierspracheBei der Programmiersprachenauswahl in Blazor Desktop ist der Entwickler auf C# reduziert, auch wenn WPF und Windows Forms ansonsten zusätzlich mit Visual Basic .NET möglich wären. Allerdings gibt es von Microsoft-Seite Blazor nur mit C#. Das Projekt "Bolero" [https://fsbolero.io] bietet zwar auch F# mit Blazor WebAssembly an, allerdings nur im Browser.
GeschichteDie offiziell erste einsatzreife Version von Blazor Desktop ist erst am 23.5.2022 (als Nachtrag zu .NET 6.0) zusammen mit .NET MAUI erschienen. Vorher war Blazor Desktop aber schon gut einsetzbar. Es gab aber in der RTM-Version noch einen kleinen Breaking Change. Dabei wurde AddBlazorWebView() ersetzt durch AddWindowsFormsBlazorWebView() und AddWpfBlazorWebView().
Einsatzgebiete von Blazor DesktopUnternehmen beginnen keine nagelneue Anwendung mit Blazor Desktop, sondern nutzen Blazor Desktop, um bestehende Windows Forms- und WPF-Anwendungen schrittweise ins Web umzuziehen. Softwareanbieter bauen zunächst einzelne Blazor-Komponenten in die native Anwendung ein. An einem Punkt, wo diese Blazor-Komponenten einen für die Zielgruppe hinreichenden Funktionsumfang besitzen, betreiben die Softwareanbieter diese Komponenten dann in einer eigenständigen Webanwendung im Browser auf Basis von Blazor-Webtechniken (Blazor WebAssembly oder Blazor Server bzw. Blazor United. So ist es denkbar, dass man aus einer großen kaufmännischen Windows-Desktop-Anwendung beispielweise die Lagerverwaltung in die Webwelt überführt, um diese Teilanwendung auf nicht mit Windows-betriebenen mobilen Endgeräten laufen zu lassen. Mit der schrittweisen Migration verteilt sich das große Investitionsvolumen auf mehrere Jahre. Zudem vermeidet der Softwareanbieter Stillstand bei seiner Windows-Software.
Deployment von Blazor Desktop-AnwendungenBeim Deployment einer Blazor-Desktop-Anwendung auf Windows muss man beachten, dass das Windows-Zielsystem zusätzlich die Installation der WebView2 Runtime [https://developer.microsoft.com/microsoft-edge/webview2/#download-section] benötigt. In dieser Runtime kommt genauso wie im modernen Microsoft Edge-Browser Google's Chromium zum Einsatz. Leider liefert Microsoft die WebView2 Runtime bisher mit keinem Betriebssystem aus. Das war früher zu Zeiten des Internet Explorers besser; da war der notwendige Code zum Einbetten des Browsers in anderen Anwendungen immer dabei. Weder bei der Portable App noch bei der Self-Contained App nehmen die .NET SDK-Werkzeuge die WebView2 Runtime mit.