Compartilhar via


Modernizar seu aplicativo UWP com .NET e AOT nativo

O suporte UWP para .NET moderno agora está em disponibilidade geral e é o tipo de projeto padrão para aplicativos UWP C# no Visual Studio 2026. Visual Studio 2026 inclui modelos de projeto internos para criar novos aplicativos UWP, bibliotecas de classes e componentes Windows Runtime usando o latest .NET.

Observação

Este artigo refere-se a .NET Native, a tecnologia de pré-compilação herdada para aplicativos UWP. .NET Native continuará recebendo correções de segurança e confiabilidade, mas não receberá novas atualizações de recursos. Se você estiver usando .NET Native no momento, este guia ajudará você a entender os benefícios da migração para a .NET moderna com a AOT nativa.

Por que modernizar para o .NET moderno?

Atualizar seu aplicativo UWP de .NET Native para o latest .NET com o AOT Nativo oferece vários benefícios principais:

Acesso aos recursos de .NET modernos

  • Últimos recursos do .NET e do C#: use o último .NET com todos os recursos de linguagem modernos e APIs
  • Active development: .NET Native continuará recebendo correções de segurança e confiabilidade, mas não receberá novas atualizações de recursos. O .NET moderno é desenvolvido ativamente com lançamentos regulares de funcionalidades
  • Melhor compatibilidade da biblioteca: Faça referência a versões mais recentes de pacotes NuGet que dão suporte apenas a .NET 6 e posteriores

Experiência aprimorada do desenvolvedor

  • Tempos de compilação mais rápidos: compilação significativamente mais rápida em comparação com .NET Native
  • Melhor suporte à depuração: ferramentas de depuração aprimoradas e recursos de diagnóstico para problemas de AOT e redução
  • Arquivos de projeto no estilo SDK: arquivos .csproj modernos e limpos sem configurações detalhadas de estilo herdado
  • XAML Recarga Dinâmica: suporte total para XAML e C# Recarga Dinâmica durante o desenvolvimento
  • Ferramentas melhores: o IntelliSense, o Live Preview e o Diagnóstico XAML funcionam perfeitamente

Benefícios de desempenho

  • Native AOT compilation: desempenho de inicialização semelhante ou melhor em comparação com .NET Native
  • Runtime otimizado: melhorias de desempenho por meio de otimizações entre procedimentos
  • Validação estática: Identificar problemas de compatibilidade do AOT no momento da construção com analisadores e anotações

Caminho de migração incremental para WinUI 3

Em vez de migrar o .NET runtime e a estrutura de interface do usuário simultaneamente, agora você pode adotar uma abordagem incremental:

  1. Primeiro, migre para o .NET mais recente e valide a compatibilidade do AOT nativo
  2. Em seguida, migre separadamente do XAML UWP para o WinUI 3 e o modelo de aplicativo Win32

Essa abordagem de duas etapas reduz o risco e torna a migração mais gerenciável.

Pré-requisitos

Para desenvolver aplicativos UWP com .NET modernos, você precisa:

  • Visual Studio 2026
  • pacote de ferramentas Plataforma Universal do Windows
  • Windows SDK 10.0.26100.0 ou posterior

Etapas de instalação

  1. Abrir o instalador de Visual Studio
  2. Em Workloads>Desktop & Mobile, selecione a carga de trabalho desenvolvimento de aplicativos para Windows
  3. Em Opcional (no painel direito), selecione:
    • Plataforma Universal do Windows ferramentas – contém todas as ferramentas para aplicativos UWP
    • Windows 11 SDK (10.0.26100.0) – Necessário para criar aplicativos XAML UWP

Criando um novo projeto UWP com o Modern .NET

Visual Studio 2026 inclui vários modelos de projeto para UWP com o .NET mais recente. Os modelos de projeto UWP padrão do C# agora têm como destino .NET moderno em vez de .NET Native.

  • Aplicativo UWP em branco: aplicativo UWP XAML padrão com empacotamento MSIX de projeto único
  • Aplicativo UWP CoreApplication em branco: para cenários avançados com conteúdo de Composição/DirectX (sem XAML)
  • UWP Windows Runtime Component: componente WinRT gerenciado usando .NET e CsWinRT mais recentes
  • Biblioteca de Classes UWP: biblioteca de classes com suporte XAML

Dica

Modelos nativos de .NET herdados (marcados como ".NET Nativo") ainda estão disponíveis para compatibilidade, mas os modelos de .NET modernos são recomendados para todo o novo desenvolvimento.

Criar um novo Project

  1. Em Visual Studio, selecione File>New>Project
  2. Filtrar por C# e UWP no menu suspenso de tipo de projeto
  3. Selecionar modelo de aplicativo UWP em branco
  4. Insira o nome do projeto e selecione Criar
  5. Escolha o destino e as versões mínimas de Windows

Noções básicas sobre projetos de .NET modernos da UWP

Os projetos de .NET modernos da UWP usam arquivos .csproj no estilo SDK com propriedades principais:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net10.0-windows10.0.26100.0</TargetFramework> <!-- Use the latest supported .NET version -->
    <TargetPlatformMinVersion>10.0.19041.0</TargetPlatformMinVersion>
    <UseUwp>true</UseUwp>
    <EnableMsixTooling>true</EnableMsixTooling>
    <PublishAot>true</PublishAot>
    <DisableRuntimeMarshalling>true</DisableRuntimeMarshalling>
  </PropertyGroup>
</Project>

Propriedades de chave explicadas

  • UseUwp: faz referência às projeções do WinRT para tipos do Windows.UI.Xaml e configura o CsWinRT para compatibilidade com UWP
  • UseUwpTools: habilita ferramentas específicas da UWP, incluindo compilador XAML, recursos de projeto e empacotamento MSIX. Observe que essa propriedade está habilitada por padrão quando UseUwp está habilitada.
  • EnableMsixTooling: Habilita o suporte MSIX para projeto único (sem necessidade de projeto de empacotamento separado)
  • PublishAot: habilita a compilação AOT nativa
  • DisableRuntimeMarshalling: otimiza o desempenho para cenários AOT nativos

Migrando aplicativos UWP existentes para .NET modernos

Para migrar um aplicativo UWP existente do .NET Native para o .NET moderno:

Etapa 1: Atualizar Arquivo do Projeto

  1. Converter seu .csproj existente em formato estilo SDK
  2. Adicionar as propriedades necessárias – UseUwp, EnableMsixToolingentão PublishAot ou SelfContained
  3. Atualizar referências de pacote NuGet para versões compatíveis com o .NET mais recente

Etapa 2: Endereçar a compatibilidade AOT nativa

O AOT nativo requer que todo o código seja compatível com AOT. Entre os problemas comuns, há:

  • Uso de reflexão: adicionar atributos apropriados ou usar geradores de origem
  • Geração de código dinâmico: substituir por alternativas de tempo de compilação
  • Bibliotecas de terceiros: verifique se todas as dependências dão suporte ao AOT nativo

Para obter mais informações sobre compatibilidade com AOT:

Projetos de código de aplicativo:

<PropertyGroup>
  <PublishAot>true</PublishAot>
</PropertyGroup>

O seguinte pode ser definido em projetos de biblioteca:

<PropertyGroup>
  <IsAotCompatible>true</IsAotCompatible>
</PropertyGroup>

Se o aplicativo existente usar um arquivo de diretivas runtime (rd.xml) para .NET Native, você precisará resolver os requisitos de reflexão e corte de forma diferente com o AOT nativo usando atributos e analisadores.

Dica

Use [GeneratedBindableCustomProperty] em classes que precisam {Binding} no XAML. Essas classes devem ser marcadas como partial.

Etapa 3: Testar minuciosamente

  1. Construa seu aplicativo no modo Release com AOT Nativo habilitado.
  2. Testar todas as funcionalidades – o código compilado AOT se comporta de forma idêntica às compilações de depuração quando anotado corretamente
  3. Resolver qualquer corte ou avisos AOT antes da publicação

Para obter mais informações sobre compatibilidade com AOT nativo, consulte Introdução aos avisos de AOT e Preparar bibliotecas .NET para otimização.

Nativo AOT vs .NET Nativo

Embora ambos compilem seu aplicativo para código nativo, o AOT nativo difere de .NET Native de maneiras importantes:

Validação estática

  • Native AOT: usa análise estática com anotações de código e analisadores para validar a compatibilidade de AOT no tempo de compilação
  • .NET Native: usa heurística e lógica de fallback que podem levar a falhas de runtime difíceis de depurar

Desempenho & Tamanho

  • Desempenho de inicialização: o AOT nativo fornece um desempenho de inicialização semelhante ou melhor (~5% melhoria nos parâmetros de comparação)
  • Tamanho binário: É esperado um aumento de aproximadamente 4 MB para aplicativos menores devido à implantação independente (sem pacote de estrutura compartilhada)
  • Desempenho de runtime: melhor desempenho para código de back-end por meio de otimizações entre procedimentos

Experiência do desenvolvedor

  • AOT nativo: Problemas surgem durante o desenvolvimento com mensagens de erro claras e suporte à depuração
  • .NET Native: tempos de compilação lentos, diferenças entre Debug/Release e problemas de runtime difíceis de diagnosticar

Reflexão e metadados

  • AOT nativo: usa atributos de tempo de compilação como [DynamicallyAccessedMembers] e geradores de origem para lidar com a reflexão
  • .NET Native: usa arquivos de diretivas runtime (rd.xml) para especificar os requisitos de metadados no tempo de build

Para obter mais informações sobre as limitações do .NET Native, consulte Getting Started with .NET Native e .NET Native and Compilation.

Publicando no Microsoft Store

Ao publicar aplicativos UWP com .NET modernos no Microsoft Store:

  1. Criar na configuração de Release com ou PublishAot ou SelfContained ativado
  2. Verifique se nenhum aviso de AOT ou corte está presente
  3. Criar pacote MSIX como de costume
  4. Carregar no Partner Center

Observação

Você pode ignorar falhas de aplicativo do Windows KIT de Certificação (WACK) relacionadas a "APIs Win32 sem suporte". O Partner Center não executa mais uma validação rigorosa da API Win32 para aplicativos UWP. Em vez disso, a segurança do AppContainer manipula permissões de runtime.

Cenários avançados

Ilhas XAML UWP

Com os .NET modernos, você pode hospedar controles XAML UWP dentro de aplicativos Win32 (WinForms, WPF, WinUI 3). Isso permite:

  • Hospedagem de controles UWP como MapControl em aplicativos empacotados de confiança total
  • Solução de projeto único combinando componentes do aplicativo Win32 e UWP
  • Binário nativo único sem cadeias de ferramentas de build separadas

Usando pacotes NuGet mais recentes

O suporte ao .NET moderno permite que você use pacotes NuGet avançados que requerem .NET 6+, removendo as limitações da restrição .NET Standard 2.0 do .NET Native.

Recursos adicionais

Consulte Também

documentação nativa do .NET (herdado)

Recursos de migração