Condividi tramite


Reflection e .NET Native

In .NET Framework, lo sviluppo gestito supporta la metaprogrammazione attraverso l'API di reflection. La reflection consente di controllare gli oggetti in un'applicazione, chiamare metodi su oggetti individuati tramite ispezione, generare nuovi tipi in fase di esecuzione e supporta molti altri scenari di codice dinamico. Supporta anche la serializzazione e la deserializzazione, che consente di mantenere e successivamente ripristinare i valori dei campi di un oggetto. Tutti questi scenari richiedono che il compilatore JIT just-in-time di .NET Framework generi codice nativo basato sui metadati disponibili.

Il runtime di .NET Native non include un compilatore JIT. Di conseguenza, tutto il codice nativo necessario deve essere generato in anticipo. Viene usato un set di regole euristiche per determinare quale codice deve essere generato, ma tale euristica non può coprire tutti i possibili scenari di metaprogrammazione. È quindi necessario fornire suggerimenti per questi scenari di metaprogrammazione usando direttive di runtime. Se il codice di implementazione o i metadati necessari non sono disponibili in fase di esecuzione, l'app genera un'eccezione MissingMetadataException, MissingRuntimeArtifactException o MissingInteropDataException. Sono disponibili due strumenti di risoluzione dei problemi che genereranno la voce appropriata per il file di direttive di runtime che elimina l'eccezione:

Nota

Per una panoramica del processo di compilazione di .NET Native e informazioni di base sui motivi per cui è necessario un file di direttive di runtime, vedere Compilazione e .NET Native.

Inoltre, .NET Native non consente di effettuare la reflection di membri privati della libreria di classi .NET Framework. Ad esempio, una chiamata alla proprietà TypeInfo.DeclaredFields per recuperare i campi di un tipo libreria di classi di .NET Framework restituisce solo campi pubblici o protetti.

Negli articoli seguenti sono riportate le nozioni e la documentazione necessarie a supportare la reflection e la serializzazione nelle applicazioni di riferimento:

Vedi anche