Web-Frontend-Framework: Eine Blazor-App für alle Plattformen

Seite 2: Zugriff auf lokalen Ressourcen mit Blazor Hybrid

Inhaltsverzeichnis

Auch in einem weiteren Szenario wünschen sich Nutzer mehr als eine Anwendungsart. Eine Browser-Anwendung läuft immer in einer Sandbox ohne Zugang zu Ressourcen auf dem lokalen Rechner oder im Netzwerk. Sowohl in technischen als auch in kaufmännischen Anwendungen gibt es aber manchmal den Wunsch, solche Ressourcen direkt ansprechen zu können – etwa dann, wenn Messgeräte oder spezielle Ausgabegeräte wie 3D-Drucker per USB- oder serieller Schnittstelle angeschlossen sind.

Für solch eine Cross-Platform-Anwendung, die nicht nur in der Browser-Sandbox, sondern auch als native Anwendung mit vollem Zugriff auf allen Ressourcen laufen soll, muss das Entwicklerteam dann zumindest Blazor MAUI (für Windows, macOS, iOS, Android oder Tizen) und entweder Blazor WebAssembly oder Blazor Server anbieten. Letztlich entsteht daraus in der Praxis oft eine der folgenden drei Konstellationen:

  • Blazor WebAssembly und Blazor Server
  • Blazor WebAssembly, Blazor Server und Blazor Desktop (wenn Windows als Betriebssystem reicht und schon Erfahrungen in Windows Forms und WPF vorhanden sind)
  • Blazor WebAssembly, Blazor Server und Blazor MAUI

Ein interessanter Ansatz besteht darin, eine Webanwendung so zu kapseln, dass sie sowohl in Blazor WebAssembly als auch Blazor Server, Blazor Desktop und Blazor MAUI verwendet werden kann.

Die vielen Gemeinsamkeiten zwischen allen Blazor-Varianten erlauben es, Programmcode leicht zwischen Blazor WebAssembly und Blazor Server sowie Blazor Hybrid auszutauschen beziehungsweise den gemeinsamen Code und gemeinsame Oberflächen in allen Blazor-Varianten zu verwenden.

Das Grundkonzept für Codesharing zwischen mehreren Blazor-Projekten oder zwischen mehreren Blazor-Arten sind Razor Class Libraries. Eine Razor Class Library ist eine spezielle Art von Klassenbibliothek in .NET, die nicht nur Programmcode und statische Ressourcen, sondern auch Razor Components enthalten kann. Razor Components sind eine Mischung aus HTML, CSS und C#-Programmcode, die der normale C#-Compiler nicht verarbeiten kann. Dafür brauchen Entwickler und Entwicklerinnen den speziellen Razor-Compiler.

Eine Razor Class Library lässt sich aber nicht eigenständig starten. Zum Start einer Blazor-Anwendung ist zusätzlich ein entsprechendes Blazor-Projekt nötig, in das sich die Razor Class Library als Abhängigkeit einbinden lässt. Eine Razor Class Library kann gleichzeitig in mehreren Blazor-Projekten genutzt werden. Sie kann direkt auf Projektebene oder als NuGet-Paket eingebunden sein, das zuvor aus dem Razor Class Library-Projekt kompiliert wurde. In eine Razor Class Library packt man möglichst alle Razor Components. Die Blazor-Projekte fungieren als "Kopf-" oder "Startprojekte", die nur noch den Startcode bereitstellen (Abb. 1). Eine solche Architektur mit Kopfprojekten gab es vor .NET MAUI auch in Xamarin für verschiedene Plattformen.

Bild 1: Code Sharing zwischen allen vier Blazor-Arten in vier Kopfprojekten mit gemeinsamer Razor Class Libraries und einer gemeinsamen normalen .NET-Klassenbibliothek

(Bild: Dr. Holger Schwichtenberg)

Eine Razor Class Library können Entwicklerteams in Visual Studio mit der Projektvorlage "Razor Class Library" oder an der Kommandozeile mit dotnet new razorclasslib erstellen. An dieser Stelle wäre es falsch, "Class Library" (dotnet new classlib) zu wählen, da es nicht möglich ist, in eine normale .NET-Bibliothek eine Razor Components einzubinden. Auch das Einbinden statischer Webelemente wie Grafiken und CSS-Dateien ist nicht elegant möglich.

In dem folgenden Optionsdialog ist die .NET-Version auszuwählen. Hier wählt der Entwickler oder die Entwicklerin die gleiche .NET-Version, die in den Kopfprojekten zum Einsatz kommt. Falls dort verschiedene .NET-Versionen laufen, gilt es, die Razor Class Library auf die kleinste dieser Versionsnummern festlegen. Aktuell besitzen nur die .NET-Versionen 6.0 (bis November 2025) und 7.0 (bis Mai 2024) offizielle Unterstützung von Microsoft, wie Abbildung 2 zeigt.

Bild 2: Wählbare Versionen für eine Razor Class Library in Visual Studio 2022 Version 17.6

(Bild: Dr. Holger Schwichtenberg)

Beim Anlegen einer Razor Class Library dürfen Entwickler und Entwicklerinnen nicht das Häkchen "Support pages and views" aktivieren, denn damit würde eine andere Art von Klassenbibliothek für Razor Views (für ASP.NET Core MVC) und Razor Pages (für ASP.NET Core Razor Pages) entstehen. Microsoft stellt dies noch nicht als eine Option dar, obwohl dabei zwei verschiedene Projektvorlagen zum Einsatz kommen.