Windows App SDK-.Bereitstellungshandbuch für eigenständige Apps

Ein Windows App SDK-Projekt ist standardmäßig frameworkabhängig. Um zu einer eigenständigen Bereitstellung zu wechseln, führen Sie die folgenden Schritte aus (die Begriffe Framework-abhängig und Selbstständig sind in Übersicht über die Bereitstellung von Windows App SDKbeschrieben).

  • Klicken Sie in Visual Studio mit der rechten Maustaste auf den App-Projektknoten, und klicken Sie auf "Projektdatei bearbeiten ", um die App-Projektdatei zur Bearbeitung zu öffnen. Für ein C++ Projekt klicken Sie zunächst auf Projekt entladen.
  • Fügen Sie in der App-Projektdatei innerhalb der Hauptdatei PropertyGroup<WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained> hinzu, wie im folgenden Screenshot gezeigt.

Screenshot, der die Eigenschaft WindowsAppSDKSelfContained in einer Projektdatei zeigt.

  • Speichern und schließen Sie die Projektdatei.
  • Klicken Sie auf Projekt wiederherstellen.
  • Wenn Sie ein Windows Application Packaging-Projekt (anstelle des Einzelprojekts MSIX, das Sie mit WinUI Blank App (Verpackt) erhalten, verwenden, nehmen Sie auch alle oben genannten Änderungen in der Projektdatei für das Paketprojekt vor.

Hinweis

Bibliotheksprojekte sollten nicht geändert werden. Eigenständige Bereitstellung sollte nur in App-Projekten (und gegebenenfalls in einem Paketerstellungsprojekt für Windows-Anwendungen) konfiguriert werden.

Samples für Anwendungen finden Sie unter Windows App SDK selbständige Einsatzbeispiele.

Nachdem Sie die WindowsAppSDKSelfContained-Eigenschaft auf true in Ihrer Projektdatei festgelegt haben, werden die Inhalte des Windows App SDK Framework-Pakets in die Build-Ausgabe extrahiert und als Teil Ihrer Anwendung bereitgestellt.

Hinweis

.NET-Anwendungen müssen auch als eigenständig veröffentlicht werden, um vollständig eigenständig zu sein. Siehe dieses Sample für die Konfiguration von .NET self-contained mit Veröffentlichungsprofilen.

Beachten Sie, dass dotnet publish verwaltete Assemblys zusammenfügt, aber kann keine EXE-Datei für WinUI 3-Apps erzeugen – die systemeigenen Windows App SDK Laufzeitabhängigkeiten müssen als separate Dateien bleiben. Siehe Single-file EXE für Details.

Hinweis

C++-Anwendungen müssen ebenfalls den Hybrid CRT verwenden, um vollständig eigenständig zu sein. Das Importieren HybridCRT.props aus Directory.Build.props ist die empfohlene Methode zum Konfigurieren für alle Projekte in einer Lösung (siehe ein Beispiel in Directory.Build.props). Eine verpackte App muss auch <UseCrtSDKReferenceStaticWarning>false</UseCrtSDKReferenceStaticWarning> in ihrer Projektdatei festlegen. In der Beispiel-App Selbstständige Bereitstellung erfahren Sie, wie Sie den Hybrid-CRT verwenden.

Wenn Ihre App paketiert ist (weitere Informationen finden Sie unter "Paket" und "Bereitstellen"-Übersicht), werden die Windows App SDK Abhängigkeiten als Inhalt im MSIX-Paket eingeschlossen. Die Bereitstellung der App erfordert weiterhin die Registrierung des MSIX-Pakets wie jede andere verpackte App.

Wenn Ihre App mit externem Speicherort gepackt oder ungepackt ist, werden die Windows App SDK-Abhängigkeiten neben .exe in Ihre Build-Ausgabe kopiert. Sie können die resultierenden Dateien per xcopy verteilen oder sie in ein benutzerdefiniertes Installationsprogramm aufnehmen.

Abhängigkeiten von zusätzlichen MSIX-Paketen

Eine kleine Anzahl von APIs im Windows App SDK basiert auf zusätzlichen MSIX-Paketen, die wichtige Betriebssystemfunktionen darstellen.

Um APIs zu verwenden, die von zusätzlichen MSIX-Paketen in einer eigenständigen App abhängen, haben Sie die folgenden Optionen:

  1. Sie können Ihre Funktionalität optional machen und sie nur dann aufhellen , wenn und wann möglich. Durch Aufrufen der IsSupported-Methode (PushNotificationManager.IsSupported) der APIs können Sie zur Laufzeit dynamisch überprüfen, ob die APIs für die aufrufende App im System verfügbar sind, auf dem sie ausgeführt wird.
    • Dies ermöglicht eine sichere, bedingte und optionale Verwendung der APIs, ohne die Einfachheit Ihrer eigenständigen Bereitstellung zu beeinträchtigen.
    • Nur wenn die Betriebssystemdienste außerhalb Ihrer App-Bereitstellung installiert sind, wird die entsprechende Funktionalität von der App aktiviert. Es gibt jedoch einige Fälle, in denen die APIs auch ohne das Vorhandensein des Singleton-Pakets funktionieren; daher ist es oft eine gute Idee, IsSupported aufzurufen, um dies zu überprüfen.
  2. Stellen Sie die erforderlichen MSIX-Pakete als Teil der App-Installation bereit.
    • Auf diese Weise können Sie in allen Szenarien von der API abhängig sein. Die Anforderung der MSIX-Paketbereitstellung von Abhängigkeiten als Teil Ihrer App-Bereitstellung kann jedoch die Einfachheit der eigenständigen Bereitstellung beeinträchtigen.
  3. Verwenden Sie die API nicht.
    • Erwägen Sie alternative APIs, die ähnliche Funktionen ohne zusätzliche Bereitstellungsanforderungen bereitstellen.

Deaktivieren (oder Aktivieren) der automatischen UndockedRegFreeWinRT-Unterstützung

Die Projekteigenschaft WindowsAppSdkUndockedRegFreeWinRTInitialize steuert, ob die Implementierung der nicht angedockten registrierungsfreien Windows-Runtime (UndockedRegFreeWinRT) des Windows App SDK beim Start der App automatisch aktiviert wird. Die Unterstützung wird von nicht verpackten, unabhängigen Apps benötigt.

WindowsAppSdkUndockedRegFreeWinRTInitialize ist standardmäßig auf true festgelegt, wenn WindowsAppSDKSelfContained auf true festgelegt ist, WindowsPackageType auf None festgelegt ist und die Projekteigenschaft OutputType auf Exe oder WinExe festgelegt ist (d. h. das Projekt erzeugt eine ausführbare Datei). Diese letzte Bedingung verhindert das Hinzufügen der automatischen UndockedRegFreeWinRT-Unterstützung zu Klassenbibliothek-DLLs und anderen nicht ausführbaren Dateien standardmäßig. Wenn Sie automatischen UndockedRegFreeWinRT-Support in einem nicht ausführbaren Programm benötigen (z. B. eine Test-DLL, die von einer ausführbaren Host-Prozessdatei geladen wird, die UndockedRegFreeWinRT nicht initialisiert), können Sie ihn in Ihrem Projekt mit <WindowsAppSdkUndockedRegFreeWinRTInitialize>true</WindowsAppSdkUndockedRegFreeWinRTInitialize> explizit aktivieren..