Project właściwości i inicjatory automatyczne

W tym temacie opisano właściwości project, które można ustawić w pliku Visual Studio project (na przykład .csproj lub .vcxproj) w celu dostosowania sposobu wdrażania aplikacji, w tym konfigurowania inicjatorów automatycznych.

Inicjatory automatyczne w Zestaw SDK do aplikacji systemu Windows

W Zestaw SDK do aplikacji systemu Windows istnieje kilka procedur, których zadaniem jest upewnienie się, że środowisko uruchomieniowe aplikacja dla systemu Windows zostało prawidłowo zainicjowane. Te procedury są znane jako automatyczne inicjatory, ponieważ są uruchamiane automatycznie przed punktem wejścia aplikacji i wykonują pracę inicjowania.

Wskazówka

Jeśli interesuje Cię szczegóły techniczne. W języku C++inicjator automatyczny jest implementowany za pomocą konstruktora klasy statycznej. W języku C#inicjator automatyczny jest implementowany za pomocą inicjatora modułu .NET. W związku z tym czasami można usłyszeć inicjator modułu używany, gdy właściwy termin jest inicjatorem automatycznym.

Wszystkie automatyczne inicjatory są domyślnie włączone warunkowo na podstawie konfiguracji pakowania i wdrażania aplikacji. Poniżej przedstawiono szczegółowe informacje o nich:

  • Automatyczne inicjowanie programu inicjatora rozruchowego (nazywanego również zależnościami dynamicznymi). Ten automatyczny inicjator automatycznie wywołuje interfejs API programu inicjatora podczas uruchamiania aplikacji. Jest to wymagane w przypadku aplikacji rozpakowanych zależnych od platformy, aby upewnić się, że środowisko uruchomieniowe aplikacja dla systemu Windows zostało dodane do grafu pakietu aplikacji. Aby uzyskać informacje o aplikacjach zależnych od platformy (i samodzielnych), zobacz Zestaw SDK do aplikacji systemu Windows omówienie wdrażania. Aby uzyskać informacje o aplikacjach rozpakowanych (i spakowanych), zobacz Aplikacje systemu Windows: pakowanie, wdrażanie i przetwarzanie.
    • W przypadku spakowanej aplikacji nie potrzebujesz bootstrappera/automatycznego inicjatora zależności dynamicznych, ponieważ plik appxmanifest.xml wyraża zależność od frameworka. W przypadku aplikacji samodzielnej nie potrzebujesz programu rozruchowego ani automatycznego inicjatora zależności dynamicznych, ponieważ takie aplikacje nie korzystają z platformy.
    • Możesz zrezygnować z automatycznego inicjatora programu rozruchowego lub dynamicznych zależności w pliku .csproj lub .vcxproj, używając <WindowsAppSdkBootstrapInitialize>false</WindowsAppSdkBootstrapInitialize>.
  • Automatyczne inicjowanie programu Deployment Manager. Jest to wymagane w przypadku aplikacji zależnych od środowiska wykonawczego, które korzystają z funkcji głównej/singletona (na przykład powiadomień push), ponieważ plik appxmanifest.xml nie może wyrazić tych zależności.
    • W przypadku aplikacji autonomicznej nie potrzebujesz automatycznego inicjatora Menedżera Wdrażania, ponieważ te aplikacje nie obsługują funkcjonalności main/singleton.
    • Aby uzyskać więcej ważnych informacji, przejdź do sekcji Samoinicjator Menedżera Wdrażania w dalszej części tego tematu.
  • Automatyczne inicjowanie aktywacji bez rejestracji. Jest to wymagane, aby samodzielna aplikacja mogła korzystać z aktywacji środowisko wykonawcze systemu Windows (WinRT) opartej na manifeście bez rejestracji, z pominięciem dokowania (UndockedRegFreeWinRT), jeśli aplikacja działa na starszej wersji systemu operacyjnego wcześniejszej niż aktualizacja Windows 10 z maja 2019 r. (wersja 1903; nazwa kodowa "19H1").
    • W przypadku aplikacji zależnych od platformy i aplikacji samodzielnie przeznaczonych dla Windows 10, wersji 1903 lub nowszej nie potrzebujesz automatycznego inicjatora aktywacji bez rejestracji. Te aplikacje mogą zrezygnować za pośrednictwem usługi <WindowsAppSdkUndockedRegFreeWinRTInitialize>false</WindowsAppSdkUndockedRegFreeWinRTInitialize>.
  • Automatyczny inicjalizator zgodności. Jest to wymagane, aby aplikacja korzystała z funkcji A/B w celu kontrolowania zachowania wdrażania aktualizacji. Aby uzyskać więcej informacji, zobacz RuntimeCompatibilityOptions.
    • W przypadku aplikacji, które nie używają zawierania A/B (co jest ustawieniem domyślnym), nie potrzebujesz automatycznego inicjowania zgodności.

Automatyczny inicjalizator Menedżera Wdrażania

Po uruchomieniu aplikacji korzystającej z Zestaw SDK do aplikacji systemu Windows 1.8 lub nowszej program Deployment Manager automatycznie uruchamia inicjator według wartości domyślnej. Ale możesz zrezygnować z zajścia tego. W tej sekcji wyjaśniono korzyści i zastrzeżenia dotyczące zezwalania na automatyczne inicjowanie programu Deployment Manager i pomaga zdecydować, czy zrezygnować z niej.

Aby Twoja aplikacja mogła korzystać z funkcjonalności w pakietach Main/Singleton (na przykład powiadomienia push): 1. Musisz użyć interfejsu API Deployment, aby upewnić się, że te pakiety są wdrażane. Pakiety Main/Singleton nie są frameworkami, ale "głównymi" pakietami, podobnie jak aplikacje, dlatego nie mogą być zarejestrowane jako zależności w manifestu appx aplikacji. Zamiast tego interfejs API Deployment zapewnia funkcjonalność do wdrażania tych pakietów. 2. Z powodu 1 aplikacja musi zainicjować Menedżera wdrażania, powodując wywołanie DeploymentManager.Initialize. Aplikacja może to zrobić automatycznie lub jawnie, jak zobaczymy. 3. Aplikacja musi być aplikacją zależną od platformy, aby polegała na pakietach Main/Singleton.

Jednym ze sposobów inicjowania menedżera wdrażania jest umożliwienie uruchamiania automatycznego inicjatora menedżera wdrażania (zobacz sekcję Auto-initializers w Zestaw SDK do aplikacji systemu Windows wcześniej w tym temacie). Inicjator automatyczny Menedżera Wdrażania wywołuje metodę DeploymentManager.Initialize za Ciebie. Innym sposobem inicjowania menedżera wdrażania jest jawne wywołanie metody DeploymentManager.Initialize samodzielnie.

Jeśli aplikacja (korzystająca z Zestaw SDK do aplikacji systemu Windows 1.8 lub nowszej) nie potrzebuje pakietów Main/Singleton, następnie należy zrezygnować z automatycznego inicjowania Menedżera wdrażania, ustawiając właściwość WindowsAppSdkDeploymentManagerInitialize na false w pliku projektu aplikacji.

Jeśli Twoja aplikacja (używając Zestaw SDK do aplikacji systemu Windows 1.8 lub nowszej) musi potrzebować pakietów Main/Singleton, możesz wykonać następujące czynności:

  • Zezwalaj na automatyczne inicjowanie programu Deployment Manager (domyślnie),
  • lub zrezygnować z automatycznego inicjowania menedżera wdrażania, ustawiając właściwość WindowsAppSdkDeploymentManagerInitialize na false w pliku project aplikacji. Następnie należy jawnie wywołać metodę DeploymentManager.Initialize samodzielnie.

Ważne

W przypadku dowolnego procesu uruchomionego w aplikacji AppContainer, jeśli wywołasz metodę DeploymentManager.Initialize , aplikacja musi zadeklarować packageManagementograniczoną możliwość w manifeście pakietu.

Właściwości projektu

W poniższej tabeli znajdują się właściwości, które można ustawić w pliku project aplikacji. Zobacz poprzednią sekcję (powyżej), aby uzyskać szczegółowe informacje o inicjatorach automatycznych w Zestaw SDK do aplikacji systemu Windows.

Nazwa i opis właściwości Wartości Aby uzyskać więcej informacji
Pakiet AppxPackage. Określa, czy aplikacja WinUI jest opakowana. false (dla niezapakowanej aplikacji) lub nieobecnej (dla spakowanej aplikacji) Rozpakowywanie aplikacji WinUI
EnableMsixTooling. Włącza funkcję MSIX z jednego projektu dla projektu. true (aby włączyć) lub nieobecny (aby wyłączyć) Pakietuj swoją aplikację przy użyciu pojedynczego projektu MSIX
UseCrtSDKReferenceStaticWarning. Pomija ostrzeżenie kompilacji, które jest uruchamiane, gdy spakowana aplikacja C++ łączy statycznie CRT (co jest wymagane do samodzielnego wdrożenia przy użyciu hybrydowego CRT). Ustaw na false w projektach aplikacji spakietowanych, które korzystają z hybrydowego CRT. false (aby pominąć ostrzeżenie w spakowanych samodzielnych aplikacjach) lub nieobecny (ustawienie domyślne, włączone ostrzeżenie) Przewodnik wdrażania aplikacji samodzielnych Zestaw SDK do aplikacji systemu Windows
UseWinUI. Określa, czy używasz struktury interfejsu użytkownika WinUI w aplikacji. true, lub nieobecny (dla false) WinUI w Zestaw SDK do aplikacji systemu Windows (WinUI)
WindowsAppSDKSingleFileVerifyConfiguration. Określa, czy SDK uruchamia element docelowy walidacji w czasie kompilacji, gdy ustawiono PublishSingleFile. Po włączeniu (ustawienie domyślne) obiekt docelowy emituje błędy , jeśli brakuje wymaganych właściwości (EnableMsixTooling, WindowsPackageType=None, IncludeAllContentForSelfExtract) i ostrzeżeń , jeśli ustawienia samodzielne są nieobecne (WindowsAppSDKSelfContained, SelfContained). Ustaw false tylko po to, aby wyłączyć wszystkie kontrole — na przykład w potokach CI, w których zgodność została zweryfikowana ręcznie. true (wartość domyślna — przebiegi walidacji), false (pomijanie wszystkich testów) Zdefiniowane w Microsoft.WindowsAppSDK.SingleFile.targets (dołączane automatycznie przez pakiet NuGet, gdy ustawiono PublishSingleFile)
WindowsAppSdkBootstrapInitialize. Określa, czy Zestaw SDK do aplikacji systemu Windows korzysta z inicjatora uruchamiania/zależności dynamicznych. true (wartość domyślna dla plików wykonywalnych), false (wartość domyślna dla plików niewykonywalnych) Rezygnacja z autoinicjalizatorów (lub włączenie do nich)
WindowsAppSdkDeploymentManagerInitialize. Określa, czy Zestaw SDK do aplikacji systemu Windows korzysta z automatycznego inicjatora programu Deployment Manager. true (wartość domyślna), false
WindowsAppSDKRuntimePatchLevel1, WindowsAppSDKRuntimePatchLevel2 i WindowsAppSDKDisabledChanges. Określa, czy Zestaw SDK do aplikacji systemu Windows wykorzystuje automatyczne inicjowanie zgodności, i konfiguruje wszelkie żądane opcje zgodności dla zachowania środowiska uruchomieniowego aplikacja dla systemu Windows w kontekście zmian dodanych w aktualizacjach serwisowych. Różne lub nieobecne (aby wyłączyć automatyczne inicjowanie) RuntimeCompatibilityOptions
WindowsAppSDKSelfContained. Określa, czy aplikacja jest wdrażana samodzielnie. true, lub nieobecny (dla false) Przewodnik wdrażania aplikacji samodzielnych Zestaw SDK do aplikacji systemu Windows
WindowsAppSdkUndockedRegFreeWinRTInitialize. Określa, czy Zestaw SDK do aplikacji systemu Windows korzysta z automatycznego inicjatora aktywacji bez rejestracji. true (wartość domyślna dla plików wykonywalnych), false (wartość domyślna dla plików niewykonywalnych) Zrezygnowanie z (lub włączenie) automatycznego wsparcia UndockedRegFreeWinRT
WindowsPackageType. Ustawienie <WindowsPackageType>None</WindowsPackageType> w przypadku aplikacji bez pakietu powoduje, że mechanizm automatycznej inicjalizacji bootstrappera/zależności dynamicznych lokalizuje i ładuje wersję pakietu Zestaw SDK do aplikacji systemu Windows najbardziej odpowiednią dla tej aplikacji. Brak lub nieobecny (aby wyłączyć automatyczne inicjowanie) Rozpakowywanie aplikacji WinUI

Za kulisami i rezygnacja z automatycznych inicjalizatorów

Example

Oto fragment typowego pliku .csproj dla projektu w języku C# WinUI 3, pokazujący niektóre właściwości projektu z powyższej tabeli.

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