© VAlex /shutterstock.com
Modernes WinUI - Teil 3

WinUI 3 mit Win32-Hosting und .NET 5


Zum Entwickeln von Windows-Desktopanwendungen unterstützt WinUI 3 sowohl das UWP-Hosting als auch das Win32-Hosting. Beim Win32-Hosting läuft die Anwendung nicht in der UWP Sandbox, sondern sie hat alle Rechte einer gewöhnlichen Windows-Anwendung und baut darüber hinaus noch auf .NET 5 auf. Seit der im Mai 2020 auf der Microsoft-Build-Konferenz vorgestellten Version WinUI 3 Preview 1 lassen sich in Visual Studio Projekte mit dem Win32-Hosting erstellen. Dieser Artikel bietet einen Überblick.

Die Sandbox von UWP-Apps war immer sowohl ein Argument für als auch eins gegen UWP-Apps. Für eine Sandbox spricht, dass der Benutzer genau sehen kann, was die App darf und was nicht. Dagegen spricht allerdings, dass einfache Tasks für Enterprise-Apps aus der Sandbox heraus nicht ohne Weiteres möglich sind, wie beispielsweise ein Zugriff auf das Dateisystem.

Mit WinUI 3 entkoppelt Microsoft das UWP UI Framework von Windows 10 und damit lässt sich jetzt auswählen, ob eine Desktopanwendung das UWP- oder das Win32-Hosting nutzt.

Abbildung 1 zeigt nochmals die beiden Hostingmodelle, Win32 und UWP. WPF und Windows Forms verwenden Win32. Doch auch in diesen Applikationen lassen sich WinUI-3-Komponenten via XAML Islands einbinden. Dann gibt es noch die reine WinUI-App, die entweder Win32 oder UWP als Hostingmodell nutzt, und schließlich gibt es noch die klassische UWP-App, die in Zukunft keine neuen Features mehr erhalten, sondern stattdessen entweder zu WinUI UWP oder WinUI Win32 migriert werden soll.

huber_winui3_1.tif_fmt1.jpgAbb. 1: Win32- und UWP-Hosting

Das Win32-Hosting ist für die meisten Enterprise-Apps höchstwahrscheinlich der richtige Weg, da dieses Hostingmodell alle Freiheiten des Windows-Desktops bietet, die Entwickler von WPF- und Windows-Forms-Anwendungen kennen.

WinUI im Desktop

Microsoft spricht beim Win32-Hosting im Zusammenhang mit WinUI auch von „WinUI im Desktop“ oder „WinUI für den Desktop“. Das kommt daher, dass es die Win32-Schnittstelle eben nur auf dem Windows-Desktop gibt. Mit dem UWP-Hosting lässt sich eine WinUI-App dagegen nicht nur auf dem Windows-Desktop, sondern auch auf anderen Windows-10-Geräten, wie der Xbox oder der HoloLens, verwenden. Im Folgenden werden die Begriffe „WinUI im Desktop“ bzw. „WinUI für den Desktop“ verwendet, womit immer WinUI mit Win32 gemeint ist.

Mit WinUI 3 Preview 1 loslegen

Um mit der Version WinUI 3 Preview 1 auf dem eigenen Rechner Desktopanwendungen zu entwickeln, sind ein paar Voraussetzungen zu erfüllen:

  1. Der eigene Rechner benötigt Windows 10 in der Version 1803 (Build 17134) oder neuer.

  2. Es muss die neueste Previewversion von Visual Studio 2019 installiert werden. Bei der Installation sind die Workloads .NET Desktop Development und Universal Windows Platform Development auszuwählen. Wer neben C# auch mit C++ entwickeln möchte, sollte zusätzlich den Workload Desktop Development with C++ und die C++ Universal Windows Platform Tools installieren.

  3. Da WinUI 3 für den Desktop auch .NET 5 benötigt, sind auch die aktuellen Previewversionen von .NET 5 zu installieren, sowohl für x86 als auch für x64.

  4. Im letzten Schritt ist die Visual Studio Extension zu installieren [1], die die WinUI-3-Preview-1-Projektvorlagen für Visual Studio 2019 enthält.

Eine übersichtliche Darstellung dieser Voraussetzungen für WinUI-3-Desktop-Apps ist in der offiziellen Microsoft-Dokumentation zu finden [2]. Sind die Projektvorlagen installiert, kann es losgehen.

Ein WinUI-Desktopprojekt erstellen

Beim Erstellen eines neuen Projekts in Visual Studio lässt sich die Liste der Projektvorlagen wie in Abbildung 2 gezeigt nach C#, Windows und WinUI filtern. Dabei ist schön zu erkennen, dass es zwei Blank-App-Vorlagen gibt:

  • eine Vorlage mit dem Zusatz WinUI in UWP

  • eine Vorlage mit dem Zusatz WinUI in Desktop

Im Dialog wird für diesen Artikel die Vorlage WinUI in Desktop ausgewählt und das Projekt mit dieser Vorlage erstellt.

huber_winui3_2.tif_fmt1.jpgAbb. 2: Die Projektvorlagen in Visual Studio

Nach einem Klick auf den Next-Button muss im Dialog ein Name für das Projekt eingegeben werden. Für diesen Artikel wird der Name „WinUIDesktopApp“ angegeben. Anschließend erscheint die in Abbildung 3 dargestellte und aus UWP-Apps bekannte Dialogbox. Hier werden die Zielversion von Windows 10 sowie die Minimumversion, unter der die Anwendung laufen soll, ausgewählt. Wie bereits erwähnt, muss die Minimumversion für WinUI-Desktop-Apps 1803 (Build 17134) sein. In Abbildung 3 ist der Defaultwert von 1809 (Build 17763) ausgewählt. Mit einem Klick auf OK wird die Solution erstellt.

huber_winui3_3.tif_fmt1.jpgAbb. 3: Der aus UWP bekannte Dialog zum Auswählen der Version

Die Projekte der Solution

Die mit der Projektvorlage erstellte Solution hat zwei Projekte, die beide den beim Erstellen angegebenen Projektnamen tragen, im Fall dieses Artikels „WinUIDesktopApp“. Das zweite Projekt trägt noch den Zusatz „(Package)“ im Projektnamen (Abb. 4).

huber_winui3_4.tif_fmt1.jpgAbb. 4: Die erstellte Solution

Das Projekt „WinUIDesktopApp“ enthält den Code für die Anwendung. Darin ist, wie in Abbildung 4 zu erkennen, eine MainWindow.xaml-Datei mit der zugehörigen Code-Behind-Datei MainWindow.xaml.cs. Die MainWindow.xaml-Datei definiert das Hauptfenster der Anwendung. Auch hat das Projekt eine App.xaml-Datei mit zugehöriger Code-Behind-Datei App.xaml.cs. Diese beiden Dateien definieren das Application-Objekt für die Anwendung, das unter anderem für das Anzeigen des in der MainWindow.xaml-Datei definierten Hauptfensters verantwortlich ist. WPF-Entwicklern dürfte die Struktur dieses Projekts ziemlich vertraut vorkommen, da in einem WPF-Projekt genau die gleichen Dateien enthalten sind. Doch was hat es mit dem zweiten Projekt namens „WinUIDesktopApp (Package)“ auf sich?

Das WinUIDesktopApp-(Package-)Projekt verpackt die eigentliche Anwendung in ein sogenanntes MSIX-Paket. Dieses Paket wird zum Installieren der Anwendung auf Windows-10-Rechnern verwendet. In Abbildung 4 ist zu sehen, dass in diesem Projekt unter Applications das WinUIDesktopApp-Projekt verknüpft ist. Ein solches Packaging-Projekt lässt sich auch für Windows-Forms- und WPF-Anwendungen erstellen, um diese mit MSIX zu verpacken. Dazu wird in Visual Studio die Projektvorlage Windows Application Packaging Project genutzt [3]. Bei einem WinUI-Desktopprojekt ist dieses Packaging-Projekt bereits Teil der Solution. Wer in Abbildung 2 im Dialog zum Erstellen eines neuen Projekts nochmals genau auf den Namen der Projektvorlage schaut, kann sehen, dass diese Blank App, Packaged heißt. „Packaged“ bedeutet, dass in der Solution neben dem eigentlich App-Projekt das zweite Projekt zum Paketieren erstellt wird. Ob es noch eine weitere Visual-Studio-Vorlage für nicht mit MSIX verpackte WinUI-Desktop-Apps geben wird, ist noch nicht bekannt.

Zum Starten der Anwendung wird in Visual S...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang