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

Ein Windows App SDK-Projekt ist standardmäßig frameworkabhängig. Um zur eigenständigen Bereitstellung zu wechseln, führen Sie die folgenden Schritte aus (die Begriffe frameworkabhängig und eigenständig werden in der Übersicht über die Windows App SDK-Bereitstellung beschrieben).

  • 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. Klicken Sie für ein C++-Projekt zuerst auf "Projekt entladen".
  • Fügen Sie in der App-Projektdatei im Hauptbereich PropertyGroupwie im folgenden Screenshot gezeigt hinzu <WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained> .

Screenshot der WindowsAppSDKSelfContained-Eigenschaft in einer Projektdatei.

  • Fügen Sie für verpackte Projekte in der App-Projektdatei am Ende der Datei vor dem Schließen </Project>die Target unten gezeigte Datei hinzu.
  <Target Name="_RemoveFrameworkReferences" BeforeTargets="_ConvertItems;_CalculateInputsForGenerateCurrentProjectAppxManifest">
    <ItemGroup>
      <FrameworkSdkReference Remove="@(FrameworkSdkReference)" Condition="$([System.String]::Copy('%(FrameworkSdkReference.SDKName)').StartsWith('Microsoft.WindowsAppRuntime.'))" />
    </ItemGroup>
  </Target>

Hinweis

Dies ist eine Problemumgehung für einen Fehler in Windows App SDK 1.1 und ist nicht mit Windows App SDK 1.2 erforderlich. Sie ist nur für verpackte Projekte erforderlich.

  • Speichere und schließe die Projektdatei.
  • Klicken Sie auf Projekt neu laden.
  • Wenn Sie ein Windows Application Packaging-Projekt (anstelle des Einzelprojekts MSIX, das Sie mit "Blank App" erhalten, "Paket" (WinUI 3 in Desktop) verwenden, nehmen Sie alle oben genannten Änderungen in der Projektdatei für das Paketprojekt ebenfalls vor.

Hinweis

Bibliotheksprojekte sollten nicht geändert werden. Eigenständige Bereitstellung sollte nur in App-Projekten (und gegebenenfalls in einem Windows Application Packaging Project) konfiguriert werden.

Beispiele für Apps finden Sie in eigenständigen Bereitstellungsbeispielen des Windows App SDK.

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

Hinweis

.NET-Apps müssen auch als eigenständig veröffentlicht werden, um vollständig eigenständig zu sein. In diesem Beispiel erfahren Sie, wie Sie .NET eigenständig mit Veröffentlichungsprofilen konfigurieren. dotnet publish wird mit Windows App SDK 1.1 noch nicht unterstützt.

Hinweis

C++-Apps müssen auch das hybride CRT verwenden, um vollständig eigenständig zu sein. Das Importieren von 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 in ihrer Projektdatei festgelegt werden <UseCrtSDKReferenceStaticWarning>false</UseCrtSDKReferenceStaticWarning> . In der eigenständigen Bereitstellungsbeispiel-App erfahren Sie, wie Sie das hybride CRT verwenden.

Wenn Ihre App verpackt ist (weitere Informationen finden Sie in der Übersicht über die Bereitstellung), 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 an einem externen Speicherort verpackt oder entpackt wird, werden die Windows App SDK-Abhängigkeiten neben der .exe Buildausgabe kopiert. Sie können die resultierenden Dateien xcopy bereitstellen oder in ein benutzerdefiniertes Installationsprogramm einschließen.

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.

Das bedeutet, dass Sie, wenn Sie diese APIs in einer eigenständigen App verwenden möchten, die folgenden Optionen haben:

  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 und AppNotificationManager.IsSupported) können Sie zur Laufzeit dynamisch überprüfen, ob die APIs für die aufrufende App auf dem 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 aufgehellt. Es gibt jedoch einige Fälle, in denen die APIs auch dann funktionieren, wenn das Singleton-Paket vorhanden ist. Daher ist das Aufrufen von IsSupported zur Überprüfung häufig eine gute Idee.
  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 der 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 " wurde in Version 1.2 des Windows App SDK (aus dem stabilen Kanal) eingeführt. Wenn diese Eigenschaft auf "true" festgelegt ist, wird sichergestellt, dass die Implementierung des nicht abgedockenen registrierungsfreien Windows-Runtime (UndockedRegFreeWinRT) beim Starten der App automatisch aktiviert ist. Diese Unterstützung wird von entpackten eigenständigen Apps benötigt.

WindowsAppSdkUndockedRegFreeWinRTInitialize ist standardmäßig auf "true" festgelegt, wenn WindowsAppSDKSelfContained "true" ist und "WindowsPackageType" "None" und (ab Version 1.2 des Windows App SDK) OutputType-Projekteigenschaft auf "Exe" oder "WinExe" festgelegt ist (d. h. das Projekt erzeugt eine ausführbare Datei). Diese letzte Bedingung besteht darin, das Hinzufügen der automatischen UndockedRegFreeWinRT-Unterstützung zu Klassenbibliothek-DLLs und anderen nicht ausführbaren Dateien standardmäßig zu verhindern. Wenn Sie automatische UndockedRegFreeWinRT-Unterstützung in einer nicht ausführbaren Datei benötigen (z. B. eine test-DLL, die von einer ausführbaren Hostprozessdatei geladen wird, die nicht initialisiert UndockedRegFreeWinRT), können Sie sie explizit in Ihrem Projekt mit <WindowsAppSdkUndockedRegFreeWinRTInitialize>true</WindowsAppSdkUndockedRegFreeWinRTInitialize>aktivieren.