Compartilhar via


Exceções de runtime em aplicativos nativos do .NET

É importante realizar testes nas compilações de lançamento do aplicativo da Plataforma Universal do Windows nas suas plataformas-alvo porque as configurações de depuração e de lançamento são completamente diferentes. Por padrão, a configuração de depuração usa o runtime 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 oMissingMetadataException, MissingInteropDataExceptione MissingRuntimeArtifactException exceções que você pode encontrar ao testar as versões de versão do seu aplicativo, consulte "Etapa 4: resolver metadados ausentes manualmente: no tópico Introdução, bem como reflexão e nativos do .NET e diretivas de runtime (rd.xml) referência de arquivo de configuração.

Compilações de depuração e versão

Quando a build de depuração é executada no runtime do .NET Core, ela não foi compilada para código nativo. Isso torna todos os serviços normalmente fornecidos pelo runtime disponíveis para seu aplicativo.

Por outro lado, o build de versão é compilado para código nativo para suas plataformas de destino, remove a maioria das dependências em runtimes e bibliotecas externas e otimiza fortemente o código para o máximo de desempenho.

Quando você depura builds de liberação compilados usando o .NET Native:

  • Use o mecanismo de depuração .NET Native, que é diferente das ferramentas normais de depuração do .NET.

  • O tamanho do executável é reduzido o máximo possível. Uma das maneiras pelas quais o .NET Native reduz o tamanho de um executável é cortar significativamente as mensagens de exceção de runtime, um tópico discutido com mais detalhes na seção mensagens de exceção do Runtime .

  • Seu código é altamente otimizado. Isso significa que o sublinhado é usado sempre que possível. (A incorporação move o código de rotinas externas para a rotina de chamada.) O fato de o .NET Native fornecer um runtime especializado e implementar o inlining agressivo afeta a pilha de chamadas exibida durante a depuração. Para obter mais informações, consulte a seção de pilha de chamadas Runtime.

Observação

Você pode controlar se os builds de depuração e de release são compilados com a cadeia de ferramentas do .NET Native marcando ou desmarcando a caixa Compilar com a cadeia de ferramentas do .NET Native. No entanto, a Microsoft Store sempre compilará a versão de produção do seu aplicativo com a cadeia de ferramentas .NET Native.

Mensagens de exceção de runtime

Para minimizar o tamanho 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 lançamento podem não exibir o texto completo das mensagens de exceção. Em vez disso, o texto pode consistir em uma subcadeia de caracteres 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 versão de depuração. Por exemplo, as informações de exceção anteriores do build de release podem aparecer da seguinte maneira no 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 runtime

Devido ao 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 o stack completo, execute a versão de depuração.

Consulte também