Guia de implantação do SDK de Aplicativos Windows para aplicativos independentes

Um projeto do SDK de Aplicativos Windows é dependente da estrutura por padrão. Para alternar para a implantação independente, siga as etapas abaixo (os termos dependente da estrutura e autocontido são descritos em Visão geral da implantação do SDK de Aplicativos Windows).

  • No Visual Studio, clique com o botão direito do mouse no nó do projeto do aplicativo e clique em Editar Arquivo de Projeto para abrir o arquivo de projeto do aplicativo para edição. Para um projeto C++, primeiro clique em Descarregar projeto.
  • No arquivo de projeto do aplicativo, dentro do principal PropertyGroup, adicione <WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained> conforme mostrado na captura de tela abaixo.

Screenshot showing the WindowsAppSDKSelfContained property set in a project file.

  • Para projetos empacotados, no arquivo de projeto do aplicativo, no final do arquivo antes do fechamento </Project>, adicione o Target mostrado abaixo.
  <Target Name="_RemoveFrameworkReferences" BeforeTargets="_ConvertItems;_CalculateInputsForGenerateCurrentProjectAppxManifest">
    <ItemGroup>
      <FrameworkSdkReference Remove="@(FrameworkSdkReference)" Condition="$([System.String]::Copy('%(FrameworkSdkReference.SDKName)').StartsWith('Microsoft.WindowsAppRuntime.'))" />
    </ItemGroup>
  </Target>

Observação

Esta é uma solução alternativa para um bug no Windows App SDK 1.1 e não será necessário com o Windows App SDK 1.2. Ele só é necessário para projetos empacotados.

  • Salve e feche o arquivo de projeto.
  • Clique em Recarregar projeto.
  • Se você estiver usando um Projeto de Empacotamento de Aplicativo do Windows (em vez do MSIX de projeto único obtido com Aplicativo em Branco, Empacotado (WinUI 3 na Área de Trabalho)), faça todas as alterações acima no arquivo de projeto para o projeto de empacotamento também.

Observação

Os projetos de bibliotecas não devem ser alterados. A implantação independente só deve ser configurada em projetos de aplicativo (e, quando aplicável, em um Projeto de Empacotamento de Aplicativos do Windows).

Para aplicativos de exemplo, consulte Exemplos de implantação independente do SDK de Aplicativos do Windows.

Tendo definido a propriedade como true no arquivo de projeto, o conteúdo do pacote do Windows App SDK Framework será extraído para a WindowsAppSDKSelfContained saída da compilação e implantado como parte do aplicativo.

Observação

Os aplicativos .NET também precisam ser publicados como autônomos para serem totalmente autônomos . Consulte este exemplo para saber como configurar o .NET autônomo com perfis de publicação. dotnet publish ainda não é suportado com o Windows App SDK 1.1.

Observação

Os aplicativos C++ também precisam usar a CRT híbrida para serem totalmente autônomos. Importar HybridCRT.props de Directory.Build.props é a maneira recomendada de configurá-lo para todos os projetos em uma solução (consulte um exemplo em Directory.Build.props). Um aplicativo empacotado também deve ser definido <UseCrtSDKReferenceStaticWarning>false</UseCrtSDKReferenceStaticWarning> em seu arquivo de projeto. Consulte o aplicativo de exemplo de implantação independente para saber como usar a CRT híbrida.

Se seu aplicativo estiver empacotado (para obter mais informações, consulte Visão geral da implantação), as dependências do SDK de Aplicativos Windows serão incluídas como conteúdo dentro do pacote MSIX. A implantação do aplicativo ainda requer o registro do pacote MSIX como qualquer outro aplicativo empacotado.

Se seu aplicativo for empacotado com local externo ou não empacotado, as dependências do SDK de Aplicativo Windows serão copiadas ao lado da saída da .exe compilação. Você pode xcopy-deploy os arquivos resultantes ou incluí-los em um instalador personalizado.

Dependências em pacotes MSIX adicionais

Um pequeno número de APIs no SDK de Aplicativos Windows depende de pacotes MSIX adicionais que representam a funcionalidade crítica do sistema operacional (SO).

  • Por exemplo (a partir do Windows App SDK 1.1), as APIs de notificações por push (PushNotificationManager) e as APIs de notificações de aplicativo (AppNotificationManager) têm uma dependência do pacote Singleton (consulte Arquitetura de implantação para o SDK de Aplicativos Windows).

Isso significa que, se você quiser usar essas APIs em um aplicativo independente, terá as seguintes opções:

  1. Você pode tornar sua funcionalidade opcional e iluminá-la somente se e quando possível. Chamar o método IsSupported das APIs (PushNotificationManager.IsSupported e AppNotificationManager.IsSupported) permitirá que você verifique dinamicamente em tempo de execução se as APIs estão ou não disponíveis para o aplicativo de chamada no sistema em que ele está sendo executado.
    • Isso permite o uso seguro, condicional e opcional das APIs sem comprometer a simplicidade de sua implantação independente.
    • Somente se os serviços do sistema operacional estiverem instalados fora da implantação do aplicativo, o aplicativo iluminará a funcionalidade apropriada. Mas, na verdade, há alguns casos em que as APIs funcionarão mesmo sem o pacote Singleton estar presente, então chamar IsSupported para verificar geralmente é uma boa ideia.
  2. Implante os pacotes MSIX necessários como parte da instalação do aplicativo.
    • Isso permite que você dependa da API em todos os cenários. Mas exigir a implantação de dependências do pacote MSIX como parte da implantação do aplicativo pode comprometer a simplicidade da implantação independente.
  3. Não use a API.
    • Considere APIs alternativas que fornecem funcionalidade semelhante sem requisitos de implantação adicionais.

Desativar (ou entrar) no suporte automático ao UndockedRegFreeWinRT

A propriedade do projeto WindowsAppSdkUndockedRegFreeWinRTInitialize foi introduzida na versão 1.2 do Windows App SDK (do canal estável). Se essa propriedade for definida como true , ela garantirá que a implementação do SDK de Aplicativos Windows do Tempo de Execução do Windows sem registro não encaixado (UndockedRegFreeWinRT) seja habilitada automaticamente na inicialização do aplicativo. Esse suporte é necessário para aplicativos independentes não empacotados.

WindowsAppSdkUndockedRegFreeWinRTInitialize padrão como true se WindowsAppSDKSelfContained for true e WindowsPackageType for None e (a partir da versão 1.2 do Windows App SDK) a propriedade de projeto OutputType estiver definida como Exe ou WinExe (ou seja, o projeto produz um executável). Essa última condição é impedir a adição automática de suporte a UndockedRegFreeWinRT em DLLs de biblioteca de classes e outros não-executáveis por padrão. Se você precisar de suporte automático a UndockedRegFreeWinRT em um não-executável (por exemplo, uma DLL de teste carregada por um executável de processo de host que não inicializa UndockedRegFreeWinRT), poderá habilitá-lo explicitamente em seu projeto com <WindowsAppSdkUndockedRegFreeWinRTInitialize>true</WindowsAppSdkUndockedRegFreeWinRTInitialize>o .