Partilhar via


Propriedades do projeto e inicializadores automáticos

Este tópico descreve as propriedades do projeto que você pode definir em seu arquivo de projeto do Visual Studio (como .csproj ou .vcxproj) para personalizar como seu aplicativo é implantado, incluindo a configuração de inicializadores automáticos.

Inicializadores automáticos no SDK do Windows App

No SDK do Aplicativo Windows, há várias rotinas cujo trabalho é garantir que o Tempo de Execução do Aplicativo Windows seja inicializado corretamente. Essas rotinas são conhecidas como inicializadores automáticos, porque são executadas automaticamente antes do ponto de entrada do aplicativo e fazem o trabalho de inicialização para você.

Sugestão

Caso esteja curioso sobre detalhes técnicos. Em C++, um inicializador automático é implementado com um construtor de classe estática. Em C#, um inicializador automático é implementado com um inicializador de módulo .NET. Portanto, às vezes você pode ouvir o inicializador de módulo usado quando o termo adequado é inicializador automático.

Todos os inicializadores automáticos são habilitados condicionalmente por padrão, com base na configuração de empacotamento e implantação do seu aplicativo. Aqui estão detalhes sobre eles:

  • Inicializador automático do Bootstrapper (também conhecido como dependências dinâmicas). Este inicializador automático chama a API de bootstrapper automaticamente na inicialização do aplicativo. Ele é necessário para aplicativos não empacotados dependentes da estrutura para garantir que o Tempo de Execução de Aplicativos Windows seja adicionado ao gráfico de pacotes do aplicativo. Para obter informações sobre aplicativos dependentes da estrutura (e autônomos), consulte Visão geral da implantação do SDK de aplicativos Windows. Para obter informações sobre aplicativos não empacotados (e empacotados), consulte Aplicativos do Windows: empacotamento, implantação e processo.
    • Para um aplicativo empacotado, você não precisa do inicializador automático de dependências dinâmicas/bootstrapper porque o appxmanifest.xml arquivo expressa a dependência da estrutura. E para um aplicativo independente, você não precisa do inicializador automático de dependências dinâmicas/bootstrapper porque esses aplicativos não usam a estrutura.
    • Você pode desativar o inicializador automático de dependências dinâmicas/bootstrapper no seu .csproj arquivo ou .vcxproj via <WindowsAppSdkBootstrapInitialize>false</WindowsAppSdkBootstrapInitialize>.
  • Inicializador automático do Deployment Manager. Isso é necessário para aplicativos empacotados dependentes da estrutura que usam a funcionalidade principal/singleton (por exemplo, notificações por push), porque o appxmanifest.xml arquivo não pode expressar essas dependências.
    • Para um aplicativo independente, você não precisa do inicializador automático do Deployment Manager porque esses aplicativos não suportam a funcionalidade principal/singleton.
    • Para obter informações mais importantes, consulte a seção O inicializador automático do Deployment Manager mais adiante neste tópico.
  • Inicializador automático de ativação sem registro. Isso é necessário para que um aplicativo autônomo use a ativação do Tempo de Execução do Windows (WinRT) sem registro baseada em manifesto (UndockedRegFreeWinRT), se o aplicativo estiver sendo executado no nível inferior em uma versão do sistema operacional anterior à Atualização de maio de 2019 do Windows 10 (versão 1903; codinome "19H1").
    • Para aplicativos dependentes da estrutura e para aplicativos autônomos destinados ao Windows 10, versão 1903 ou posterior, você não precisa do inicializador automático de ativação sem registro. Essas aplicações podem desativar através <WindowsAppSdkUndockedRegFreeWinRTInitialize>false</WindowsAppSdkUndockedRegFreeWinRTInitialize>do .
  • Inicializador automático de compatibilidade. Isso é necessário para que um aplicativo use instalações de contenção A/B para controlar o comportamento de liberação de manutenção. Para obter mais informações, consulte RuntimeCompatibilityOptions.
    • Para aplicativos que não usam contenção A/B (que é o padrão), você não precisa do inicializador automático de compatibilidade.

O inicializador automático do Deployment Manager

Quando um aplicativo que usa o Windows App SDK 1.8 ou posterior é iniciado, o inicializador automático do Gerenciador de Implantação é executado por padrão. Mas você pode optar por não que isso aconteça. Esta seção explica os benefícios e as advertências de permitir que o inicializador automático do Deployment Manager seja executado e ajuda você a decidir se deseja ou não desativar.

Para que seu aplicativo use a funcionalidade nos pacotes Main/Singleton (por exemplo, notificações por push): 1. Você deve usar a API de Implantação para garantir que esses pacotes sejam implantados (porque os pacotes Main/Singleton não são estruturas, mas pacotes "principais", como aplicativos; portanto, eles não podem ser registrados como dependências no manifesto appx do seu aplicativo. Em vez disso, a API de implantação fornece a funcionalidade para implantar esses pacotes). 2. Devido a 1), seu aplicativo precisa inicializar o Deployment Manager fazendo com que DeploymentManager.Initialize seja chamado. Seu aplicativo pode fazer isso automaticamente ou explicitamente, como veremos. 3. Seu aplicativo precisa ser um aplicativo empacotado dependente do framework, de modo a ter uma dependência dos pacotes Main/Singleton.

Uma maneira de inicializar o Gerenciador de Implantação é permitir que o inicializador automático do Gerenciador de Implantação seja executado (consulte a seção Inicializadores automáticos no SDK de aplicativos do Windows anteriormente neste tópico). O inicializador automático do Deployment Manager chama DeploymentManager.Initialize para você. A outra maneira de inicializar o Deployment Manager é chamar explicitamente DeploymentManager.Initialize por si mesmo.

Se seu aplicativo (usando o SDK de Aplicativo Windows 1.8 ou posterior) não precisar dos pacotes Main/Singleton, você deverá desativar o inicializador automático do Gerenciador de Implantação definindo a propriedade WindowsAppSdkDeploymentManagerInitialize como false no arquivo de projeto do aplicativo.

Se a sua aplicação (usando o Windows App SDK 1.8 ou posterior) precisar dos pacotes Main/Singleton, então poderá:

  • Permitir que o inicializador automático do Deployment Manager seja executado (o que ele faz por padrão),
  • ou desative o inicializador automático do Gerenciador de Implantação definindo a propriedade WindowsAppSdkDeploymentManagerInitialize como false no arquivo de projeto do seu aplicativo. Em seguida, você deve chamar explicitamente DeploymentManager.Initialize você mesmo.

Importante

Para qualquer processo em execução no AppContainer, se você fizer com que DeploymentManager.Initialize seja chamado, seu aplicativo precisará declarar o packageManagement no manifesto do pacote.

Propriedades do projeto

Na tabela abaixo estão as propriedades que você pode definir no arquivo de projeto do seu aplicativo. Consulte a seção anterior (acima) para obter detalhes sobre os inicializadores automáticos no SDK do Aplicativo Windows.

Nome e descrição do imóvel Valores Para mais informações
AppxPackage. Especifica se um aplicativo WinUI 3 é empacotado ou não. false (para um aplicativo não empacotado) ou ausente (para um aplicativo empacotado) Desempacotar uma aplicação WinUI
EnableMsixTooling. Habilita o recurso MSIX de projeto único para um projeto. true (para habilitar), ou ausente (para desabilitar) Empacotar seu aplicativo usando MSIX de projeto único
UseWinUI. Especifica se você está usando a estrutura de interface do usuário WinUI 3 em seu aplicativo. verdadeiro, ou ausente (para falso) WinUI no SDK do Aplicativo Windows (WinUI 3)
WindowsAppSdkBootstrapInitialize. Determina se o SDK do Aplicativo Windows aproveita ou não o inicializador automático de dependências dinâmicas/bootstrapper. true (o padrão para executáveis), false (o padrão para não executáveis) Desativação de (ou para) inicializadores automáticos
WindowsAppSdkDeploymentManagerInitialize. Determina se o SDK do Aplicativo Windows aproveita ou não o inicializador automático do Gerenciador de Implantação. true (o padrão), false
WindowsAppSDKRuntimePatchLevel1, WindowsAppSDKRuntimePatchLevel2 e WindowsAppSDKDisabledChanges. Determina se o SDK do Aplicativo Windows aproveita ou não o inicializador automático de compatibilidade e configura quaisquer opções de compatibilidade desejadas para o comportamento do Tempo de Execução de Aplicativos Windows das alterações adicionadas nas atualizações de manutenção. Vários, ou ausentes (para desativar o inicializador automático) RuntimeCompatibilityOptions
WindowsAppSdkSelfContained. Determina se um aplicativo é implantado de forma autônoma ou não. verdadeiro, ou ausente (para falso) Guia de implantação do SDK de Aplicativo Windows para aplicativos autônomos
WindowsAppSdkUndockedRegFreeWinRTInitialize. Determina se o SDK de Aplicativos Windows aproveita ou não o inicializador automático de ativação sem registro. true (o padrão para executáveis), false (o padrão para não executáveis) Optar por não receber (ou para) o suporte automático a UndockedRegFreeWinRT
WindowsPackageType. A configuração <WindowsPackageType>None</WindowsPackageType> de um aplicativo não empacotado faz com que o inicializador automático de dependências dinâmicas/bootstrapper localize e carregue uma versão da versão do SDK de Aplicativo Windows mais apropriada para seu aplicativo. Nenhum, ou ausente (para desativar o inicializador automático) Desempacotar uma aplicação WinUI

Nos bastidores e desativação de inicializadores automáticos

Example

Aqui está um trecho de um arquivo típico .csproj para um projeto C# WinUI 3, mostrando algumas das propriedades do projeto da tabela acima em uso.

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