Freigeben über


Projekteigenschaften und automatische Initialisierer

In diesem Thema werden die Projekteigenschaften beschrieben, die Sie in Ihrer Visual Studio-Projektdatei (z .csproj . B. oder .vcxproj) festlegen können, um die Bereitstellung Ihrer App anzupassen, einschließlich der Konfiguration von automatischen Initialisierern.

Automatische Initialisierer im Windows App SDK

Im Windows App SDK gibt es mehrere Routinen, deren Aufgabe es ist, sicherzustellen, dass die Windows-App-Runtime ordnungsgemäß initialisiert ist. Diese Routinen werden als automatische Initialisierer bezeichnet, da sie automatisch vor dem Einstiegspunkt Ihrer Anwendung ausgeführt werden und initialisiert werden.

Tipp

Für den Fall, dass Sie auf technische Details neugierig sind. In C++ wird ein autoinitialisierer mit einem statischen Klassenkonstruktor implementiert. In C# wird ein autoinitialisierer mit einem .NET-Modulinitialisierer implementiert. Daher hören Sie manchmal den Modulinitialisierer , der verwendet wird, wenn der richtige Begriff automatisch initialisiert wird.

Alle automatischen Initialisierer sind standardmäßig bedingt aktiviert, basierend auf der Paket- und Bereitstellungskonfiguration Ihrer App. Hier sind Details zu ihnen:

  • Bootstrapper (auch als dynamische Abhängigkeiten bezeichnet) autoinitialisierer. Dieser automatische Initialisierer ruft die Bootstrapper-API automatisch beim App-Start auf. Sie ist für frameworkabhängige entpackte Apps erforderlich, um sicherzustellen, dass die Windows-App-Runtime dem Paketdiagramm der App hinzugefügt wird. Informationen zu frameworkabhängigen (und eigenständigen) Apps finden Sie in der Übersicht über die Windows App SDK-Bereitstellung. Informationen zu entpackten (und verpackten) Apps finden Sie unter Windows-Apps: Verpacken, Bereitstellung und Prozess.
    • Für eine verpackte App benötigen Sie den autoinitialisierer/dynamischen Bootstrapper/dynamische Abhängigkeiten nicht, da die appxmanifest.xml Datei die Frameworkabhängigkeit ausdrückt. Und für eine eigenständige App benötigen Sie nicht den autoinitialisierer/dynamischen Bootstrapper/dynamische Abhängigkeiten, da diese Apps das Framework nicht verwenden.
    • Sie können den autoinitialisierer/dynamischen Abhängigkeiten in Ihrer .csproj Datei .vcxproj über <WindowsAppSdkBootstrapInitialize>false</WindowsAppSdkBootstrapInitialize>den Bootstrapper/dynamische Abhängigkeiten deaktivieren.
  • Automatische Initialisierung des Bereitstellungs-Managers. Dies ist für frameworkabhängige verpackte Apps erforderlich, die die Haupt-/Singleton-Funktionalität (z. B. Pushbenachrichtigungen) verwenden, da die appxmanifest.xml Datei diese Abhängigkeiten nicht ausdrücken kann.
    • Für eine eigenständige App benötigen Sie den automatischen Bereitstellungs-Manager-Initialisierer nicht, da diese Apps die Haupt-/Singleton-Funktionalität nicht unterstützen.
    • Weitere wichtige Informationen finden Sie im Abschnitt "Automatische Initialisierung des Deployment Manager " weiter unten in diesem Thema.
  • Autoinitialisierer für die registrierungsfreie Aktivierung. Dies ist erforderlich, damit eine eigenständige App die manifestbasierte und abgedockene Windows-Runtime(WinRT)-Aktivierung (UndockedRegFreeWinRT) verwendet, wenn die App auf einer Betriebssystemversion vor Windows 10 Mai 2019 Update (Version 1903; Codename "19H1") ausgeführt wird.
    • Für frameworkabhängige Apps und für eigenständige Apps, die auf Windows 10, Version 1903 oder höher abzielen, benötigen Sie den automatischen Initialisierer für die registrierungsfreie Aktivierung nicht. Diese Apps können sich über <WindowsAppSdkUndockedRegFreeWinRTInitialize>false</WindowsAppSdkUndockedRegFreeWinRTInitialize>die App abmelden.
  • Automatischer Kompatibilitätsinitialisierer. Dies ist erforderlich, damit eine App A/B-Eindämmungseinrichtungen verwendet, um das Wartungsfreigabeverhalten zu steuern. Weitere Informationen finden Sie unter RuntimeCompatibilityOptions.
    • Für Apps, die keine A/B-Eindämmung verwenden (die Standardeinstellung ist), benötigen Sie den automatischen Kompatibilitätsinitialisierer nicht.

Der automatische Initialisierer des Bereitstellungsmanagers

Wenn eine App, die das Windows App SDK 1.8 oder höher verwendet, gestartet wird, wird der automatische Initialisierungs-Manager standardmäßig ausgeführt. Aber Sie können ablehnen, dass dies geschieht. In diesem Abschnitt werden die Vorteile und Einschränkungen erläutert, mit denen der automatische Initialisierungs-Manager des Deployment Manager ausgeführt werden kann, und es hilft Ihnen zu entscheiden, ob sie sich abmelden möchten.

Damit Ihre App Funktionen in den Main/Singleton-Paketen (z. B. Pushbenachrichtigungen) nutzen kann: 1. Sie müssen die Bereitstellungs-API verwenden, um sicherzustellen, dass diese Pakete bereitgestellt werden (da die Main/Singleton-Pakete keine Frameworks, sondern "Hauptpakete" sind, z. B. Apps; daher können sie nicht als Abhängigkeiten im Appx-Manifest Ihrer App registriert werden. Stattdessen stellt die Bereitstellungs-API die Funktionalität bereit, um diese Pakete bereitzustellen). 2. Aufgrund von 1 muss Ihre App den Bereitstellungs-Manager initialisieren, indem DeploymentManager.Initialize aufgerufen wird. Ihre App kann dies entweder automatisch oder explizit tun, wie wir sehen. 3. Ihre App muss eine Framework-abhängige, paketierte Anwendung sein, damit sie eine Abhängigkeit von den Main-/Singleton-Paketen hat.

Eine Möglichkeit zum Initialisieren des Bereitstellungs-Managers besteht darin, die Automatische Initialisierung des Bereitstellungs-Managers zuzulassen (siehe Abschnitt Autoinitialisierer im Windows App SDK weiter oben in diesem Thema). Der Auto-Initializer des Deployment Managers ruft DeploymentManager.Initialize für Sie auf. Die andere Möglichkeit zum Initialisieren des Bereitstellungs-Managers besteht darin, "DeploymentManager.Initialize " explizit aufzurufen.

Wenn Ihre App (mit dem Windows App SDK 1.8 oder höher) die Main/Singleton-Pakete nicht benötigt, sollten Sie die Initialisierung durch den Bereitstellungs-Manager deaktivieren, indem Sie die Eigenschaft WindowsAppSdkDeploymentManagerInitialize in der Projektdatei Ihrer App auf false setzen.

Wenn Ihre App (mit dem Windows App SDK 1.8 oder höher) die Main/Singleton-Pakete benötigt, können Sie eine der folgenden Aktionen ausführen:

  • Gestatten Sie, dass der Bereitstellungs-Manager-Autoinitialisierer läuft, was er standardmäßig tut.
  • oder deaktivieren Sie die automatische Initialisierung des Deployment Managers, indem Sie die Eigenschaft WindowsAppSdkDeploymentManagerInitialize in der Projektdatei Ihrer App auf false festlegen. Anschließend sollten Sie "DeploymentManager.Initialize" explizit aufrufen.

Von Bedeutung

Für jeden Prozess, der im AppContainer ausgeführt wird, müssen Sie sicherstellen, dass DeploymentManager.Initialize aufgerufen wird, dann muss Ihre App die packageManagement im Paketmanifest deklarieren.

Projekteigenschaften

In der folgenden Tabelle sind die Eigenschaften aufgeführt, die Sie in der Projektdatei Ihrer App festlegen können. Ausführliche Informationen zu den automatischen Initialisierern im Windows App SDK finden Sie im vorherigen Abschnitt (oben).

Eigenschaftenname und -beschreibung Werte Weitere Informationen
AppxPackage. Gibt an, ob eine WinUI 3-App verpackt ist. false (für eine entpackte App) oder nicht vorhanden (für eine verpackte App) Entpacken einer WinUI-App
EnableMsixTooling. Aktiviert das MSIX-Feature für ein Projekt mit einem Projekt. true (zum Aktivieren) oder nicht vorhanden (zum Deaktivieren) Packen Der App mithilfe von MSIX mit einem Projekt
UseWinUI. Gibt an, ob Sie das WinUI 3-Benutzeroberflächenframework in Ihrer App verwenden. wahr oder nicht vorhanden (für "false") WinUI im Windows App SDK (WinUI 3)
WindowsAppSdkBootstrapInitialize. Bestimmt, ob das Windows App SDK den autoinitialisierer automatischen Bootstrapper/dynamische Abhängigkeiten nutzt. true (standard für ausführbare Dateien), false (standard für nicht ausführbare Dateien) Deaktivieren von automatischen Initialisierern (oder in)
WindowsAppSdkDeploymentManagerInitialize. Bestimmt, ob das Windows App SDK den Auto-Initialisierer des Deployment Managers verwendet. true (Standard), false
WindowsAppSDKRuntimePatchLevel1, WindowsAppSDKRuntimePatchLevel2 und WindowsAppSDKDisabledChanges. Bestimmt, ob das Windows App SDK den automatischen Kompatibilitätsinitialisierer nutzt, und konfiguriert alle gewünschten Kompatibilitätsoptionen für das Verhalten der Windows-App-Runtime von Änderungen, die in Wartungsupdates hinzugefügt wurden. Verschiedene oder nicht vorhanden (zum Deaktivieren des automatischen Initialisierungsprogramms) RuntimeCompatibilityOptions
WindowsAppSdkSelfContained. Bestimmt, ob eine App eigenständig bereitgestellt wird. wahr oder nicht vorhanden (für "false") Bereitstellungshandbuch für eigenständige Apps im Windows App SDK
WindowsAppSdkUndockedRegFreeWinRTInitialize. Bestimmt, ob das Windows App SDK den automatischen Initialisierer für die registrierungsfreie Aktivierung nutzt. true (standard für ausführbare Dateien), false (standard für nicht ausführbare Dateien) Deaktivieren der automatischen UndockedRegFreeWinRT-Unterstützung
WindowsPackageType. Die Einstellung <WindowsPackageType>None</WindowsPackageType> für eine entpackte App bewirkt, dass der automatische Initialisierungsprogramm für bootstrapper/dynamische Abhängigkeiten eine Version der Windows App SDK-Version sucht und lädt, die für Ihre App am besten geeignet ist. Keine oder nicht vorhanden (zum Deaktivieren des automatischen Initialisierungsprogramms) Entpacken einer WinUI-App

Hinter den Kulissen und Deaktivieren der automatischen Initialisierung

Example

Hier ist ein Auszug aus einer typischen .csproj Datei für ein C#WinUI 3-Projekt, in dem einige der Projekteigenschaften aus der obigen Tabelle angezeigt werden.

...
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
    <TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
    ...
    <UseWinUI>true</UseWinUI>
    <EnableMsixTooling>true</EnableMsixTooling>
  </PropertyGroup>
...