Freigeben über


Projekteigenschaften und automatische Initialisierer

In diesem Thema werden die project Eigenschaften beschrieben, die Sie in Ihrer Visual Studio project Datei (z. B. .csproj oder .vcxproj) festlegen können, um die Bereitstellung Ihrer App anzupassen, einschließlich der Konfiguration von autoinitialisierern.

Automatische Initialisierer im Windows App SDK

Im Windows App SDK gibt es mehrere Routinen, deren Auftrag 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 die Initialisierungsarbeit für Sie übernehmen.

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 automatischer Initialisierer mit einem .NET Modulinitialisierer implementiert. Manchmal hören Sie den Ausdruck Modulinitialisierer, obwohl der richtige Begriff Auto-Initialisierer ist.

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) Auto-Initialisierer. 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 zum Paketdiagramm der App hinzugefügt wird. Informationen zu frameworkabhängigen (und eigenständigen) Apps finden Sie unter Windows App SDK Bereitstellungsübersicht. Informationen zu entpackten (und verpackten) Apps finden Sie unter Windows-Apps: Verpacken, Bereitstellung und Prozess.
    • Für eine verpackte App benötigen Sie den Bootstrapper/dynamische Abhängigkeiten-Autoinitialisierer nicht, da die appxmanifest.xml-Datei die Framework-Abhängigkeit darstellt. Und für eine eigenständige App benötigen Sie den Bootstrapper/dynamische Abhängigkeiten-Autoinitialisierer nicht, da diese Apps das Framework nicht verwenden.
    • Sie können den Bootstrapper/dynamische Abhängigkeiten Auto-Initialisierer in Ihrer .csproj- oder .vcxproj-Datei über <WindowsAppSdkBootstrapInitialize>false</WindowsAppSdkBootstrapInitialize> 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 Initialisierer des Bereitstellungsmanagers nicht, da solche Apps keine Haupt- oder Singleton-Funktionalität unterstützen.
    • Weitere wichtige Informationen finden Sie im Abschnitt "Automatische Initialisierung des Deployment Manager " weiter unten in diesem Thema.
  • Autoinitialisierer für eine aktivierung ohne Registrierung. Dies ist erforderlich für eine eigenständige App, um die manifestbasierte, abgedockte und registrierungsfreie Windows Runtime (WinRT)-Aktivierung (UndockedRegFreeWinRT) nutzen zu können, wenn die App auf einer Betriebssystemversion ausgeführt wird, die vor dem Windows 10 Mai 2019 Update (Version 1903; Codename "19H1") liegt.
    • 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> abmelden.
  • Automatischer Kompatibilitäts-Initialisator. 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 die 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 zur Initialisierung des Bereitstellungs-Managers ist es, den Autoinitialisierer des Bereitstellungs-Managers auszuführen (siehe Abschnitt Autoinitialisierer in 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 auf die automatische Initialisierung des Deployment Managers verzichten, indem Sie die Eigenschaft WindowsAppSdkDeploymentManagerInitialize in der Projektdatei Ihrer App auf false festlegen.

Wenn Ihre App (mit dem Windows App SDK 1.8 oder höher) benötigt die Main/Singleton-Pakete, 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 den automatischen Initialisierer des Deployment Managers, indem Sie die Eigenschaft WindowsAppSdkDeploymentManagerInitialize auf false in der project Datei Ihrer App 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.

Project-Eigenschaften

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

Eigenschaftsname und -beschreibung Werte Weitere Informationen
AppxPackage. Gibt an, ob eine WinUI-App verpackt ist. false (für eine entpackte App) oder nicht vorhanden (für eine verpackte App) Entpacken einer WinUI-App
EnableMsixTooling. Aktiviert das Single-Project MSIX-Feature für ein Projekt. true (zum Aktivieren) oder nicht vorhanden (zum Deaktivieren) Verpacken Sie Ihre App mit einem einzelnen Projekt-MSIX
UseWinUI. Gibt an, ob Sie das WinUI-Benutzeroberflächenframework in Ihrer App verwenden. wahr oder nicht vorhanden (für "false") WinUI im Windows App SDK (WinUI)
WindowsAppSdkBootstrapInitialize. Legt fest, ob das Windows App SDK den Bootstrapper beziehungsweise die automatische Initialisierung dynamischer Abhängigkeiten verwendet. true (standard für ausführbare Dateien), false (standard für nicht ausführbare Dateien) Deaktivieren von automatischen Initialisierern (oder in)
WindowsAppSdkDeploymentManagerInitialize. Bestimmt, ob der Windows App SDK den automatischen Initialisierer des Deployment Manager nutzt. true (Standard), false
WindowsAppSDKRuntimePatchLevel1, WindowsAppSDKRuntimePatchLevel2 und WindowsAppSDKDisabledChanges. Bestimmt, ob die Windows App SDK den automatischen Kompatibilitätsinitialisierer nutzt, und konfiguriert alle gewünschten Kompatibilitätsoptionen für Windows App Laufzeitverhalten 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") Windows App SDK Bereitstellungshandbuch für eigenständige Apps
WindowsAppSdkUndockedRegFreeWinRTInitialize. Bestimmt, ob der 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) Ein- oder Ausschalten der automatischen UndockedRegFreeWinRT-Unterstützung
WindowsPackageType. Das Festlegen <WindowsPackageType>None</WindowsPackageType> für eine entpackte App veranlasst den Bootstrapper/dynamische Abhängigkeiten Auto-Initialisierer dazu, die für Ihre App am besten geeignete Version des Windows App SDK zu finden und zu laden. Keine, oder nicht vorhanden (zum Deaktivieren des automatischen Initialisierers) 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, der einige der Projekteigenschaften aus der obigen Tabelle zeigt.

...
<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>
...