Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come risolvere l'errore irreversibile del motore di esecuzione che si verifica quando si ottiene il descrittore di sicurezza di una classe generica da un modulo immagine nativo in un ambiente .NET Framework.
Versione originale del prodotto: Microsoft .NET Framework 3.5 Service Pack 1
Numero KB originale: 2468429
Sintomi
Quando si tenta di ottenere il descrittore di sicurezza di una classe generica da un modulo di immagine nativa (Ngen.exe) in un ambiente Microsoft .NET Framework, viene visualizzato un messaggio di errore irreversibile del motore di esecuzione. Questo problema può verificarsi se le condizioni seguenti sono vere:
- L'applicazione include un assembly caricato indipendente dal dominio (
LoaderOptimization.MultiDomainoLoaderOptimization.MultiDomainHost). - L'assembly contiene un'istanza di una classe generica.
- L'assembly è stato compilato in un'immagine nativa usando lo strumento Native Image Generator (Ngen.exe).
- L'applicazione carica l'immagine nativa in un dominio applicazione.
- L'applicazione tenta di usare la classe generica da un secondo dominio applicazione senza caricare l'immagine nativa in tale dominio applicazione.
Motivo
Common Language Runtime (CLR) potrebbe consentire l'esecuzione del codice nell'immagine nativa indipendente dal dominio nel secondo dominio applicazione anche se l'immagine nativa non è ancora stata caricata in tale dominio applicazione. Se CLR tenta di ottenere un descrittore di sicurezza prima del caricamento dell'immagine nativa( ad esempio, quando viene creato un delegato per un metodo del tipo generico di cui è stata creata un'istanza), può verificarsi un errore irreversibile del motore di esecuzione.
Questo problema è difficile da riprodurre. CLR carica in modo aggressivo gli assembly nei domini applicazione. Ad esempio, se un Type oggetto viene passato in un dominio applicazione, in questo modo CLR carica l'assembly che definisce il tipo. Pertanto, non è facile per il secondo dominio applicazione ottenere informazioni sulla classe generica di cui è stata creata un'istanza senza causare il caricamento dell'assembly da parte di CLR. I percorsi di codice che contribuiscono a questo problema si verificano solo in scenari complessi.
Soluzioni alternative
Per risolvere questo problema, usare uno dei metodi seguenti:
Caricare in modo esplicito l'assembly in ogni dominio applicazione che lo userà. Ad esempio, caricare l'assembly chiamando il
Assembly.Loadmetodo .Non caricare l'assembly come indipendente dal dominio.
Annotazioni
Questa soluzione alternativa potrebbe influire sulle dimensioni del working set dell'applicazione.
Non usare lo strumento Ngen.exe per creare un'immagine nativa per l'assembly.
Annotazioni
Questa soluzione alternativa potrebbe influire sulle prestazioni dell'applicazione.
Aggiornare l'applicazione a .NET Framework versione 4. Tutti i problemi noti per contribuire a questo problema sono stati risolti in .NET Framework 4.