Compartilhar via


Introdução ao .NET Native

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

  1. Desenvolver um aplicativo UWP (Plataforma Universal do Windows)e testar os builds de depuração do seu 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 existente do Windows 8.x para o .NET Native, certifique-se de revisar Migrando Seu Aplicativo Windows 8.x para .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 do Windows.

  1. Crie um novo projeto UWP no Visual Studio usando o modelo de aplicativo Universal do Windows para Visual C# ou Visual Basic. Por padrão, todos os aplicativos UWP têm como alvo o CoreCLR, e seus builds de lançamento são compilados usando a ferramenta de compilação .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 do .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, as compilações de depuração são compiladas com JIT para permitir a implantação rápida pressionando F5, enquanto as compilações de versão são compiladas usando a tecnologia de pré-compilação do .NET Native. Isso significa que você deve criar e testar os builds de depuração do seu aplicativo para garantir que eles funcionem normalmente antes de compilá-los com a cadeia de ferramentas .NET Native.

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ê desenvolver no Visual Basic, ele será encontrado na pasta Meu Projeto do projeto.

Observação

Para obter uma visão geral do processo de compilação do .NET Native que fornece informações de fundo sobre por que um arquivo de diretivas de tempo de execução é 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, DataContractJsonSerializere XmlSerializer, não utilizam 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 da 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 nativos do .NET são colocados no subdiretório ILC.out no diretório especificado na caixa de texto caminho de saída do Build na caixa de diálogo Propriedades do projeto , guia Compilar . Os binários que não estão nesta pasta não foram compilados com o .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 as versões 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 aplicativo otimizado do .NET Native. 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 o .NET Native que você não encontra na área de trabalho é um runtime MissingMetadataException, MissingInteropDataExceptionou missingRuntimeArtifactException exceção. 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 resultam de diferenças na reflexão e na disponibilidade de metadados em aplicativos da área de trabalho e no .NET Native, 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