Partilhar via


Exceções de tempo de execução em aplicativos nativos do .NET

É importante testar as compilações de versão do seu aplicativo da Plataforma Universal do Windows em suas plataformas de destino porque as configurações de depuração e lançamento são completamente diferentes. Por padrão, a configuração de depuração usa o tempo de execução do .NET Core para compilar seu aplicativo, mas a configuração de versão usa o .NET Native para compilar seu aplicativo para código nativo.

Importante

Para obter informações sobre como lidar com o MissingMetadataException, MissingInteropDataExceptione MissingRuntimeArtifactException exceções que você pode encontrar ao testar as versões de lançamento do seu aplicativo, consulte "Etapa 4: resolver manualmente metadados ausentes: no tópico Introdução, bem como Reflection e nativo do .NET e diretivas de tempo de execução (rd.xml) Configuration File Reference.

Depurar e liberar compilações

Quando o build de depuração é executado sobre o runtime do .NET Core, não foi compilado em código nativo. Isso torna todos os serviços normalmente fornecidos pelo tempo de execução disponíveis para seu aplicativo.

Por outro lado, o build de release é compilado como código nativo para as suas plataformas alvo, remove a maioria das dependências de tempos de execução e bibliotecas externas, e otimiza intensamente o código para maximizar o desempenho.

Ao depurar builds de lançamento que são compilados usando o .NET Native:

  • Você usa o mecanismo de depuração nativo do .NET, que é diferente das ferramentas de depuração normais do .NET.

  • O tamanho do seu executável é reduzido tanto quanto possível. Uma das maneiras pelas quais o .NET Native reduz o tamanho de um executável é cortando significativamente as mensagens de exceção durante a execução, um tópico discutido com mais detalhes na seção mensagens de exceção durante a execução.

  • Seu código é altamente otimizado. Isto significa que o inlining é utilizado sempre que possível. (O inlining move o código de rotinas externas para a rotina de chamada.) O fato de que o .NET Native fornece um tempo de execução especializado e implementa inlining agressivo afeta a pilha de chamadas que é exibida durante a depuração. Para obter mais informações, consulte a seção pilha de chamadas do Runtime.

Observação

Você pode controlar se as compilações de depuração e lançamento são compiladas com a cadeia de ferramentas nativa do .NET marcando ou desmarcando a caixa Compilar com a cadeia de ferramentas nativa do .NET . No entanto, a Microsoft Store sempre compilará a versão de produção do seu aplicativo com a cadeia de ferramentas nativa do .NET.

Mensagens de exceção de tempo de execução

Para minimizar o tamanho do executável do aplicativo, o .NET Native não inclui o texto completo das mensagens de exceção. Como resultado, as exceções de tempo de execução lançadas em compilações de versão podem não mostrar o texto completo das mensagens de exceção. Em vez disso, o texto pode consistir em uma substring junto com um link a ser seguido para obter mais informações. Por exemplo, as informações de exceção podem aparecer como:

Exception thrown: '$16_System.AggregateException' in Unknown Module.

Additional information: AggregateException_ctor_DefaultMessage

If there is a handler for this exception, the program may be safely continued.

Se você precisar da mensagem de exceção completa, execute a compilação de depuração. Por exemplo, a informação de exceção anterior da build de lançamento pode aparecer da seguinte forma na build de depuração:

Exception thrown: 'System.AggregateException' in NativeApp.exe.

Additional information: Value does not fall within the expected range.

Pilha de chamadas de execução

Devido a inlining e outras otimizações, a pilha de chamadas exibida por um aplicativo compilado pela cadeia de ferramentas .NET Native pode não ajudá-lo a identificar claramente o caminho para uma exceção de tempo de execução.

Para obter a pilha completa, execute a compilação de depuração.

Ver também