Condividi tramite


Eccezioni di runtime nelle applicazioni .NET Native

È importante testare le build di rilascio dell'app della piattaforma universale di Windows (UWP) sulle loro piattaforme di destinazione perché le configurazioni di debug e rilascio sono completamente diverse. Per impostazione predefinita, la configurazione di debug usa il runtime .NET Core per compilare l'app, ma la configurazione della versione usa .NET Native per compilare l'app in codice nativo.

Importante

Per informazioni sulla gestione delle MissingMetadataException, MissingInteropDataException, e MissingRuntimeArtifactException eccezioni che possono verificarsi durante il test delle versioni di rilascio dell'app, vedi "Passaggio 4: Risolvere manualmente i metadati mancanti" nell'argomento "Iniziare", nonché Reflection e .NET Native e Riferimento ai file di configurazione delle direttive runtime (rd.xml).

Compilazioni di debug e rilascio

Quando la compilazione di debug viene eseguita sul runtime di .NET Core, non è stata compilata nel codice nativo. In questo modo tutti i servizi normalmente forniti dal runtime sono disponibili per l'app.

D'altra parte, la build di versione viene compilata in codice nativo per le piattaforme di destinazione, rimuove la maggior parte delle dipendenze da runtime e librerie esterne e ottimizza notevolmente il codice per ottenere prestazioni massime.

Quando si esegue il debug delle build di versione compilate usando .NET Native:

  • Si usa il motore di debug .NET Native, che è diverso dai normali strumenti di debug .NET.

  • Le dimensioni del file eseguibile sono ridotte il più possibile. Uno dei modi in cui .NET Native riduce le dimensioni di un eseguibile consiste nel tagliare in modo significativo i messaggi di eccezione di runtime, un argomento descritto in modo più dettagliato nella sezione messaggi di eccezione di runtime.

  • Il codice è fortemente ottimizzato. Questo significa che l'inlining viene utilizzato ogni volta che è possibile. L'inlining del codice sposta le istruzioni dalle routine esterne alla routine chiamante. Poiché .NET Native fornisce un runtime specializzato e implementa un inlining aggressivo, ciò influisce sul call stack visualizzato durante il debug. Per ulteriori informazioni, vedere la sezione dello stack delle chiamate runtime.

Annotazioni

È possibile controllare se le compilazioni di debug e versione vengono compilate con la catena di strumenti .NET Native selezionando o deselezionando la casella Compila con la catena di strumenti .NET Native. Tuttavia, Microsoft Store compilerà sempre la versione di produzione dell'app con la catena di strumenti .NET Native.

Messaggi di eccezione di runtime

Per ridurre al minimo le dimensioni dell'eseguibile dell'applicazione, .NET Native non include il testo completo dei messaggi di eccezione. Di conseguenza, le eccezioni di runtime generate nelle build di versione potrebbero non visualizzare il testo completo dei messaggi di eccezione. Al contrario, il testo può essere costituito da una sottostringa insieme a un collegamento da seguire per altre informazioni. Ad esempio, le informazioni sull'eccezione possono essere visualizzate come:

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 è necessario il messaggio di eccezione completo, eseguire piuttosto la versione di debug. Ad esempio, le informazioni sulle eccezioni precedenti della build di versione potrebbero essere visualizzate come segue nella build di debug:

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

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

Stack di chiamate in run-time

A causa dell'inlining e di altre ottimizzazioni, lo stack di chiamate visualizzato da un'app compilata dalla catena di strumenti .NET Native potrebbe non aiutare a identificare chiaramente il percorso di un'eccezione di runtime.

Per ottenere lo stack completo, eseguire invece il build di debug.

Vedere anche