Projektové vlastnosti a automatické inicializátory

Toto téma popisuje project vlastnosti, které můžete nastavit v souboru Visual Studio project (například .csproj nebo .vcxproj), abyste mohli přizpůsobit způsob nasazení aplikace, včetně konfigurace automatických inicializátorů.

Automatické inicializátory v Windows App SDK

V Windows App SDK existuje několik rutin, jejichž úlohou je zajistit správné inicializaci modulu Windows App Runtime. Tyto rutiny se označují jako automatické inicializátory, protože se spouští automaticky před vstupním bodem vaší aplikace a provádějí inicializaci za vás.

Návod

V případě, že vás zajímají technické podrobnosti. V jazyce C++ se implementuje automatický inicializátor se statickým konstruktorem třídy. V jazyce C# se implementuje automatický inicializátor s inicializátorem modulu .NET. Někdy tedy uslyšíte výraz inicializátor modulu, když se správně má použít termín automatický inicializátor.

Všechny automatické inicializátory jsou ve výchozím nastavení podmíněné, a to na základě konfigurace balení a nasazení vaší aplikace. Tady jsou podrobnosti o nich:

  • Automatický inicializátor „Bootstrapper“ (označovaný také jako dynamické závislosti) Tento autoinicializátor volá rozhraní API bootstrapperu při spuštění aplikace. Je vyžadováno pro nebalené aplikace závislé na frameworku, aby bylo zajištěno, že se do grafu balíčků aplikace přidá Windows App Runtime. Informace o aplikacích závislých na architektuře (a samostatných) najdete v tématu Windows App SDK přehled nasazení. Informace o rozbalených (a zabalených) aplikacích najdete v tématu Aplikace pro Windows: balení, nasazení a zpracování.
    • Pro zabalenou aplikaci nepotřebujete automaticky inicializátor spouštěcího nástroje nebo dynamické závislosti, protože appxmanifest.xml soubor vyjadřuje závislost architektury. Pro samostatně fungující aplikaci nepotřebujete automatický inicializátor bootstrapperu ani dynamických závislostí, protože tyto aplikace nevyužívají framework.
    • Můžete vyloučit automatický inicializátor bootstrapperu nebo dynamických závislostí ve vašem .csproj nebo .vcxproj souboru pomocí <WindowsAppSdkBootstrapInitialize>false</WindowsAppSdkBootstrapInitialize>.
  • Automatický inicializátor Deployment Manageru To se vyžaduje pro zabalené aplikace závislé na architektuře, které využívají hlavní/singletonové funkce (například nabízená oznámení), protože appxmanifest.xml soubor nemůže tyto závislosti vyjádřit.
    • Pro samostatnou aplikaci nepotřebujete automatický inicializátor Deployment Manageru, protože tyto aplikace nepodporují hlavní nebo singletonové funkce.
    • Důležitější informace najdete v části Autoicializátor Deployment Manageru dále v tomto tématu.
  • Automatický inicializátor aktivace bez registrace To se vyžaduje, aby samostatná aplikace používala aktivaci Windows Runtime bez registrace založené na manifestu (WinRT) (UndockedRegFreeWinRT), pokud aplikace běží na nižší úrovni na verzi operačního systému starší než Windows 10 aktualizaci z května 2019 (verze 1903; s názvem "19H1").
    • Pro aplikace závislé na architektuře a pro samostatné aplikace, které cílí na Windows 10 verze 1903 nebo novější, nepotřebujete automatický inicializátor aktivace bez registrace. Tyto aplikace se mohou odhlásit prostřednictvím <WindowsAppSdkUndockedRegFreeWinRTInitialize>false</WindowsAppSdkUndockedRegFreeWinRTInitialize>.
  • Automatický inicializátor kompatibility. To se vyžaduje, aby aplikace používala A/B kontejnerová zařízení ke kontrole chování při vydávání servisních verzí. Další informace najdete v tématu RuntimeCompatibilityOptions.
    • U aplikací, které nepoužívají zahrnutí A/B (což je výchozí nastavení), nepotřebujete automatický inicializátor kompatibility.

Automatický inicializátor Deployment Manageru

Když se spustí aplikace, která používá Windows App SDK 1.8 nebo novější, automaticky se spustí inicializátor Deployment Manageru ve výchozím nastavení. Ale můžete se z toho odhlásit. Tato část vysvětluje výhody a omezení povolení automatického inicializátoru Deployment Manageru a pomůže vám rozhodnout, zda se chcete odhlásit nebo ne.

Aby vaše aplikace využívala funkce v balíčcích Main/Singleton (například nabízená oznámení): 1. Abyste zajistili nasazení těchto balíčků (protože balíčky Main/Singleton nejsou architektury, ale "hlavní" balíčky, jako jsou aplikace, je nutné použít rozhraní API pro nasazení, aby se tyto balíčky neregistrovaly jako závislosti v manifestu appx vaší aplikace. Místo toho rozhraní API pro nasazení poskytuje funkce pro nasazení těchto balíčků). 2. Vzhledem k 1) vaše aplikace musí inicializovat Správce nasazení tím, že zavolá DeploymentManager.Initialize. Vaše aplikace to může udělat buď automaticky, nebo explicitně, jak uvidíme. 3. Vaše aplikace musí být balíčková aplikace závislá na rozhraní, aby byla závislá na balíčcích Main/Singleton.

Jedním ze způsobů inicializace Správce nasazení je umožnit spuštění automatického inicializátoru Deployment Manageru (viz část Auto-initializers v Windows App SDK dříve v tomto tématu). Autoicializátor Deployment Manageru za vás volá DeploymentManager.Initialize . Dalším způsobem inicializace Správce nasazení je explicitně voláním DeploymentManager.Initialize.

Pokud vaše aplikace (pomocí Windows App SDK 1.8 nebo novější) nepotřebuje balíčky Main/Singleton, potom byste měli zrušit automatické inicializátory Správce nasazení nastavením vlastnosti WindowsAppSdkDeploymentManagerInitialize na false v souboru project vaší aplikace.

Pokud vaše aplikace (pro Windows App SDK 1.8 nebo novější) skutečně potřebuje balíčky Main/Singleton, můžete:

  • Povolit automatickému inicializátoru Deployment Manageru spuštění (což dělá ve výchozím nastavení)
  • nebo se odhlaste z automatického inicializátoru Deployment Manageru nastavením vlastnosti WindowsAppSdkDeploymentManagerInitialize na false v souboru project vaší aplikace. Pak byste sami měli explicitně volat DeploymentManager.Initialize.

Důležité

Pro jakýkoli proces spuštěný v AppContainer, pokud způsobíte, že DeploymentManager.Initialize bude volána, pak vaše aplikace musí deklarovat packageManagementomezenou schopnost v manifestu balíčku.

Vlastnosti projektu

V následující tabulce jsou vlastnosti, které můžete nastavit v souboru project vaší aplikace. Podrobnosti o automatických inicializátorech v Windows App SDK najdete v předchozí části (výše).

Název a popis vlastnosti Hodnoty Další informace
AppxPackage. Určuje, jestli je aplikace WinUI zabalená. false (pro rozbalenou aplikaci) nebo chybí (pro zabalenou aplikaci) Rozbalení aplikace WinUI
EnableMsixTooling. Povolí funkci MSIX pro jeden projekt. true (pro povolení) nebo chybí (zakázat) Zabalte svou aplikaci pomocí jednoproduktového MSIXu
UseWinUI. Určuje, jestli v aplikaci používáte architekturu uživatelského rozhraní WinUI. true, nebo chybí (pro false) WinUI v rámci Windows App SDK (WinUI)
WindowsAppSdkBootstrapInitialize. Určuje, zda Windows App SDK využívá automatický inicializátor pro bootstrapper/dynamické závislosti. true (výchozí hodnota pro spustitelné soubory), false (výchozí hodnota pro nespustitelné soubory) Odhlášení z automatických inicializátorů (nebo do)
WindowsAppSdkDeploymentManagerInitialize. Určuje, zda Windows App SDK využívá automatický inicializátor Deployment Manageru. true (výchozí), false
WindowsAppSDKRuntimePatchLevel1, WindowsAppSDKRuntimePatchLevel2 a WindowsAppSDKDisabledChanges. Určuje, zda Windows App SDK využívá automatický inicializátor pro kompatibilitu a konfiguruje jakékoli požadované možnosti kompatibility pro fungování modulu runtime Windows App v rámci změn přidaných v servisních aktualizacích. Různé nebo chybějící (pro deaktivaci automatického inicializátoru) RuntimeCompatibilityOptions
WindowsAppSdkSelfContained. Určuje, jestli je aplikace nasazená samostatně. true, nebo chybí (pro false) průvodce nasazením Windows App SDK pro samostatné aplikace
WindowsAppSdkUndockedRegFreeWinRTInitialize. Určuje, zda Windows App SDK využívá autoicializátor aktivace bez registrace. true (výchozí hodnota pro spustitelné soubory), false (výchozí hodnota pro nespustitelné soubory) Volba odhlášení z automatické podpory UndockedRegFreeWinRT (nebo přihlášení do)
WindowsPackageType. Nastavení <WindowsPackageType>None</WindowsPackageType> pro rozbalenou aplikaci způsobí, že automatický inicializátor spouštěče nebo dynamických závislostí vyhledá a načte tu verzi Windows App SDK, která je pro vaši aplikaci nejvhodnější. Žádné nebo chybí (zakázání automatického inicializátoru) Rozbalení aplikace WinUI

Na pozadí a odhlášení z automatických inicializátorů

Example

Tady je výňatek z typického souboru .csproj pro project C# WinUI 3, který ukazuje některé z project vlastností z výše uvedené tabulky.

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