Compartilhar via


Introdução ao .NET Native

Importante

Modernize seu aplicativo UWP com .NET e AOT nativo: se você estiver desenvolvendo um novo aplicativo UWP ou quiser modernizar um aplicativo UWP existente, recomendamos usar o suporte UWP para o .NET mais recente com o AOT nativo em vez de .NET Native. O suporte UWP para .NET moderna agora está disponível em geral e é o tipo de projeto padrão para aplicativos UWP C# no Visual Studio 2026. Isso fornece acesso aos recursos mais recentes de .NET e C#, suporte aprimorado para ferramentas e depuração e tempos de build mais rápidos. .NET Native continuará recebendo correções de segurança e confiabilidade, mas não receberá novas atualizações de recursos.

Se você estiver escrevendo um novo aplicativo UWP ou migrando um aplicativo Windows 8.x existente (anteriormente também chamado de aplicativo Microsoft Store), poderá seguir o mesmo conjunto de procedimentos. Para criar um aplicativo nativo .NET, siga estas etapas:

  1. Desenvolve um aplicativo Plataforma Universal do Windows (UWP) e teste os builds de depuração do aplicativo para garantir que ele funcione corretamente.

  2. Gerenciaruso adicional de reflexão e serialização.

  3. Implantar e testar as compilações de lançamento do seu aplicativo.

  4. Resolver manualmente osmetadados ausentes, e repetir o passo 3 até que todos os problemas sejam resolvidos.

Observação

Se você estiver migrando um aplicativo Windows 8.x existente para .NET Native, examine Migrating Your Windows 8.x App to .NET Native.

Etapa 1: Desenvolver e testar compilações de depuração do aplicativo UWP

Se você estiver desenvolvendo um novo aplicativo ou migrando um existente, siga o mesmo processo de qualquer aplicativo Windows.

  1. Crie um novo projeto UWP em Visual Studio usando o modelo de aplicativo Windows Universal para Visual C# ou Visual Basic. Por padrão, todos os aplicativos UWP têm como alvo o CoreCLR e seus builds de versão são compilados usando ferramentas do .NET Native.

  2. Observe que há alguns problemas de compatibilidade conhecidos entre a compilação de projetos de aplicativo UWP com a cadeia de ferramentas .NET Native e sem ela. Consulte o guia de migração para obter mais informações.

Agora você pode escrever código C# ou Visual Basic na área de superfície nativa .NET que é executada no sistema local (ou no simulador).

Importante

Ao desenvolver seu aplicativo, observe qualquer uso de serialização ou reflexão em seu código.

Por padrão, os builds de depuração são compilados por JIT para habilitar a implantação rápida do F5, enquanto os builds de versão são compilados usando a tecnologia de pré-compilação nativa do .NET. Isso significa que você deve compilar e testar os builds de depuração do aplicativo para garantir que eles funcionem normalmente antes de compilá-los com a cadeia de ferramentas nativas do .NET.

Etapa 2: Lidar com o uso adicional de reflexão e serialização

Um arquivo de diretivas de runtime, Default.rd.xml, é adicionado automaticamente ao seu projeto quando você o cria. Se você desenvolve em C#, ele será encontrado na pasta Propriedades do seu projeto. Se você desenvolve em Visual Basic, ele está na pasta My Project do seu projeto.

Observação

Para obter uma visão geral do processo de compilação nativo do .NET que fornece informações básicas sobre por que um arquivo de diretivas de runtime é necessário, consulte .NET Native and Compilation.

O arquivo de diretivas de runtime é usado para definir os metadados de que seu aplicativo precisa em tempo de execução. Em alguns casos, a versão padrão do arquivo pode ser adequada. No entanto, alguns códigos que dependem de serialização ou reflexão podem exigir entradas adicionais no arquivo de diretivas de runtime.

Serialização

Há duas categorias de serializadores e ambas podem exigir entradas adicionais no arquivo de diretivas de runtime:

  • Serializadores não baseados em reflexão. Os serializadores encontrados na biblioteca de classes do .NET Framework, como as classes DataContractSerializer, DataContractJsonSerializer e XmlSerializer, não dependem da reflexão. No entanto, eles exigem que o código seja gerado com base no objeto para ser serializado ou desserializado. Para obter mais informações, consulte a seção "serializadores Microsoft" em Serialização e metadados.

  • Serializadores de terceiros. Bibliotecas de serialização de terceiros, sendo o mais comum delas o serializador JSON Newtonsoft, geralmente são baseadas em reflexão e exigem entradas no arquivo *.rd.xml para dar suporte à serialização e desserialização de objetos. Para obter mais informações, consulte a seção "Serializadores de terceiros" em Serialização e Metadados.

métodos que dependem da reflexão

Em alguns casos, o uso da reflexão no código não é óbvio. Algumas APIs comuns ou padrões de programação não são considerados parte da API de reflexão, mas dependem da reflexão para serem executadas com êxito. Isso inclui os seguintes métodos de construção de método e instanciação de tipo:

Para obter mais informações, consulte APIs que dependem de reflexão.

Observação

Os nomes de tipo usados em arquivos de diretivas de runtime devem ser totalmente qualificados. Por exemplo, o arquivo deve especificar "System.String" em vez de "String".

Etapa 3: Implantar e testar os builds de versão do seu aplicativo

Depois de atualizar o arquivo de diretivas de tempo de execução, você pode recompilar e implantar as versões de lançamento do seu aplicativo. Os binários .NET Native são colocados no subdiretório ILC.out do diretório especificado na caixa de texto Build output path da caixa de diálogo Properties do projeto, guia Compile. Binários que não estão nesta pasta não foram compilados com .NET Native. Teste seu aplicativo minuciosamente e teste todos os cenários, incluindo cenários de falha, em cada uma de suas plataformas de destino.

Se o aplicativo não funcionar corretamente (especialmente nos casos em que ele gera exceções MissingMetadataException ou exceções MissingInteropDataException em tempo de execução), siga as instruções na próxima seção, Etapa 4: resolver manualmente os metadados ausentes. Habilitar exceções de primeira chance pode ajudá-lo a encontrar esses bugs.

Quando você testou e depurou os builds de depuração do seu aplicativo e está confiante de que eliminou as exceções MissingMetadataException e MissingInteropDataException, você deve testar seu aplicativo como um .NET Native aplicativo otimizado. Para fazer isso, altere a configuração do projeto ativo de Debug para Release.

Etapa 4: resolver metadados ausentes manualmente

A falha mais comum que você encontrará com .NET Native, que não ocorre na área de trabalho, é uma exceção de tempo de execução MissingMetadataException, MissingInteropDataException ou MissingRuntimeArtifactException. Em alguns casos, a ausência de metadados pode se manifestar em comportamento imprevisível ou até mesmo em falhas de aplicativo. Esta seção discute como você pode depurar e resolver essas exceções adicionando diretivas ao arquivo de diretivas de runtime. Para obter informações sobre o formato das diretivas de runtime, consulte Diretivas de Runtime (Arquivo de Configuração de Referênciard.xml). Depois de adicionar diretivas de runtime, você deve implantar e testar seu aplicativo novamente e resolver qualquer nova exceção MissingMetadataException, MissingInteropDataExceptione MissingRuntimeArtifactException até não encontrar mais nenhuma.

Dica

Especifique as diretivas de runtime em um alto nível para permitir que seu aplicativo seja resiliente às alterações de código. Recomendamos adicionar diretivas de runtime nos níveis de namespace e tipo em vez do nível de membro. Observe que pode haver uma compensação entre resiliência e binários maiores com tempos de compilação mais longos.

Ao resolver uma exceção de metadados ausente, considere estes problemas:

  • O que o aplicativo estava tentando fazer antes da exceção?

    • Por exemplo, foi associação de dados, serialização ou desserialização de dados ou diretamente usando a API de reflexão?
  • Esse é um caso isolado ou você acredita que encontrará o mesmo problema para outros tipos?

    • Por exemplo, uma exceção MissingMetadataException é lançada ao serializar um tipo no modelo de objeto do aplicativo. Se você souber outros tipos que serão serializados, poderá adicionar diretivas de runtime para esses tipos (ou para seus namespaces que contêm, dependendo de quão bem o código é organizado) ao mesmo tempo.
  • Você pode reescrever o código para que ele não use reflexão?

    • Por exemplo, o código usa a palavra-chave dynamic quando você já sabe qual tipo esperar?

    • O código chama um método que depende da reflexão quando alguma alternativa melhor está disponível?

Observação

Para obter informações adicionais sobre como lidar com problemas que decorrem de diferenças na reflexão e na disponibilidade de metadados em aplicativos da área de trabalho e .NET Nativo, consulte APIs que dependem da reflexão.

Para obter alguns exemplos específicos de tratamento de exceções e outros problemas que ocorrem ao testar seu aplicativo, consulte:

Consulte também