Compartilhar 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 Aplicativo do Windows

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

Dica

Caso esteja curioso sobre detalhes técnicos. No C++, um inicializador automático é implementado com um construtor de classe estático. No 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 apropriado for 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 aplicativo. Aqui estão os detalhes sobre eles:

  • Inicializador automático bootstrapper (também conhecido como dependências dinâmicas). Esse inicializador automático chama a API bootstrapper automaticamente na inicialização do aplicativo. Ele é necessário para aplicativos não empacotados dependentes da estrutura, a fim de garantir que o Windows App Runtime seja adicionado ao grafo de pacotes do aplicativo. Para obter informações sobre aplicativos dependentes da estrutura (e autocontidos), consulte a visão geral da implantação do SDK do Aplicativo do Windows. Para obter informações sobre aplicativos não empacotados (e empacotados), consulte os 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 autocontido, você não precisa do inicializador automático de dependências/dependências dinâmicas porque esses aplicativos não usam a estrutura.
    • Você pode recusar o inicializador automático de dependências dinâmicas/bootstrapper no arquivo .csproj ou .vcxproj no arquivo por meio de <WindowsAppSdkBootstrapInitialize>false</WindowsAppSdkBootstrapInitialize>.
  • Inicializador automático do Gerenciador de Implantação. 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 autocontido, você não precisa do inicializador automático do Deployment Manager porque esses aplicativos não dão suporte à funcionalidade principal/singleton.
    • Para obter informações mais importantes, consulte a seção O inicializador automático do Gerenciador de Implantação posteriormente neste tópico.
  • Inicializador automático de ativação sem registro. Isso é necessário para que um aplicativo autocontido use a ativação winRT (UndockedRegFreeWinRT) sem registro baseado em manifesto, se o aplicativo estiver executando um downlevel em uma versão do sistema operacional anterior à Atualização do Windows 10 de maio de 2019 (versão 1903; codinome "19H1").
    • Para aplicativos dependentes de estrutura e para aplicativos autocontidos destinados ao Windows 10, versão 1903 ou posterior, você não precisa do inicializador automático de ativação sem registro. Esses aplicativos podem recusar por meio de <WindowsAppSdkUndockedRegFreeWinRTInitialize>false</WindowsAppSdkUndockedRegFreeWinRTInitialize>.
  • 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 versão de manutenção. Para obter mais informações, consulte RuntimeCompatibilityOptions.
    • Para aplicativos que não usam a contenção A/B (que é o padrão), você não precisa do inicializador automático de compatibilidade.

O inicializador automático do Gerenciador de Implantação

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

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 aplicativo. Em vez disso, a API de Implantação fornece a funcionalidade para implantar esses pacotes). 2. Por causa de 1), seu aplicativo precisa inicializar o Gerenciador de Implantação fazendo com que DeploymentManager.Initialize seja chamado. Seu aplicativo pode fazer isso automaticamente ou explicitamente, como veremos. 3. O aplicativo precisa ser um aplicativo empacotado dependente do framework para que ele tenha 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 do Aplicativo do Windows anteriormente neste tópico). O inicializador automático do Gerenciador de Distribuição chama DeploymentManager.Initialize para você. A outra maneira de inicializar o Gerenciador de Implantação é chamar explicitamente DeploymentManager.Initialize por conta própria.

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

Se o seu aplicativo (usando o Windows App SDK 1.8 ou posterior) precisar dos pacotes Main/Singleton, você pode:

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

Importante

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

Propriedades do projeto

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

Nome e descrição da propriedade Valores Para obter mais informações
AppxPackage. Especifica se um aplicativo WinUI 3 está ou não empacotado. false (para um aplicativo não empacotado) ou ausente (para um aplicativo empacotado) Desempacotar um aplicativo WinUI
EnableMsixTooling. Habilita o recurso MSIX de projeto único para um projeto. true (para habilitar) ou ausente (para desabilitar) Empacotar seu aplicativo usando o MSIX de projeto único
UseWinUI. Especifica se você está usando a estrutura de interface do usuário do WinUI 3 em seu aplicativo. true ou ausente (para false) WinUI no SDK do Aplicativo do Windows (WinUI 3)
WindowsAppSdkBootstrapInitialize. Determina se o SDK do Aplicativo do 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) Recusar (ou entrar) inicializadores automáticos
WindowsAppSdkDeploymentManagerInitialize. Determina se o SDK do Aplicativo do 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 do Windows aproveita ou não o inicializador automático de compatibilidade e configura as opções de compatibilidade desejadas para o comportamento do Windows App Runtime das alterações adicionadas nas atualizações de manutenção. Vários ou ausentes (para desabilitar o inicializador automático) RuntimeCompatibilityOptions
WindowsAppSdkSelfContained. Determina se um aplicativo é implantado independentemente ou não. true ou ausente (para false) Guia de implantação do SDK de Aplicativos do Windows para aplicativos autônomos
WindowsAppSdkUndockedRegFreeWinRTInitialize. Determina se o SDK do Aplicativo do 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) Como recusar (ou entrar) o suporte automático DesencaixadoRegFreeWinRT
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 do Aplicativo do Windows mais apropriada para seu aplicativo. Nenhum ou ausente (para desabilitar o inicializador automático) Desempacotar um aplicativo WinUI

Nos bastidores e recusando inicializadores automáticos

Example

Aqui está um trecho de um arquivo típico .csproj para um projeto do WinUI 3 em C#, 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>
...