AssemblyLoadContext Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Rappresenta il concetto di runtime di un ambito per il caricamento di assembly.
public ref class AssemblyLoadContext
public ref class AssemblyLoadContext abstract
public class AssemblyLoadContext
public abstract class AssemblyLoadContext
type AssemblyLoadContext = class
Public Class AssemblyLoadContext
Public MustInherit Class AssemblyLoadContext
- Ereditarietà
-
AssemblyLoadContext
Commenti
AssemblyLoadContext rappresenta un contesto di caricamento. Concettualmente, un contesto di carico crea un ambito per il caricamento, la risoluzione e lo scaricamento di un set di assembly.
AssemblyLoadContext esiste principalmente per fornire l'isolamento del caricamento degli assembly. Consente il caricamento di più versioni dello stesso assembly all'interno di un singolo processo. Sostituisce i meccanismi di isolamento forniti da più AppDomain istanze in .NET Framework.
Note
- AssemblyLoadContext non fornisce alcuna funzionalità di sicurezza. Tutto il codice dispone delle autorizzazioni complete del processo.
- Solo in .NET Core 2.0 - 2.2 AssemblyLoadContext è una classe astratta. Per creare una classe concreta in queste versioni, implementare il AssemblyLoadContext.Load(AssemblyName) metodo .
Utilizzo nel runtime
Il runtime implementa due contesti di caricamento dell'assembly:
- AssemblyLoadContext.Default rappresenta il contesto predefinito del runtime, che viene usato per l'assembly principale dell'applicazione e le relative dipendenze statiche.
- Il metodo Assembly.LoadFile(String) isola gli assembly che carica istanziando una delle classi base più semplici AssemblyLoadContext. Ha uno schema di isolamento semplicistico che carica ogni assembly nel proprio AssemblyLoadContext senza alcuna risoluzione delle dipendenze.
Utilizzo dell'applicazione
Un'applicazione può crearne una propria AssemblyLoadContext per creare una soluzione personalizzata per scenari avanzati. La personalizzazione è incentrata sulla definizione dei meccanismi di risoluzione delle dipendenze.
Il componente AssemblyLoadContext fornisce due punti di estensione per implementare la risoluzione dell'assemblaggio gestito:
- Il metodo AssemblyLoadContext.Load(AssemblyName) fornisce la prima opportunità per il AssemblyLoadContext di risolvere, caricare e restituire l'assembly. Se il AssemblyLoadContext.Load(AssemblyName) metodo restituisce
null, il caricatore tenta di caricare l'assembly in AssemblyLoadContext.Default. - Se l'oggetto AssemblyLoadContext.Default non è in grado di risolvere l'assembly, l'originale AssemblyLoadContext ottiene una seconda possibilità di risolvere l'assembly. Il runtime genera l'evento Resolving .
Inoltre, il AssemblyLoadContext.LoadUnmanagedDll(String) metodo virtuale consente la personalizzazione della risoluzione predefinita degli assembly non gestiti. L'implementazione predefinita restituisce null, che fa sì che la ricerca di runtime usi i criteri di ricerca predefiniti. I criteri di ricerca predefiniti sono sufficienti per la maggior parte degli scenari.
Sfide tecniche
Non è possibile caricare più versioni del runtime in un singolo processo.
Caution
Il caricamento di più copie o versioni diverse degli assembly del framework può causare un comportamento imprevisto e difficile da diagnosticare.
Tip
Usare i limiti dei processi con comunicazione remota o interprocesso per risolvere questo problema di isolamento.
La tempistica del caricamento dell'assembly può rendere difficile il test e il debug. Gli assembly vengono in genere caricati senza che le relative dipendenze vengano risolte immediatamente. Le dipendenze vengono caricate in base alle esigenze:
- Quando il codice si dirama in un assemblaggio dipendente.
- Quando il codice carica le risorse.
- Quando il codice carica in modo esplicito gli assembly.
L'implementazione di AssemblyLoadContext.Load(AssemblyName) può aggiungere nuove dipendenze che possono essere isolate per consentire l'esistenza di versioni diverse. L'implementazione più naturale inserisce queste dipendenze nel contesto predefinito. Un'attenta progettazione può isolare le nuove dipendenze.
Lo stesso assembly viene caricato più volte in contesti differenti.
- Ciò può causare messaggi di errore confusi, ad esempio "Impossibile eseguire il cast dell'oggetto di tipo "Sample.Plugin" per digitare "Sample.Plugin".
- Il marshalling tra limiti di isolamento non è semplice. Una soluzione tipica consiste nell'usare un'interfaccia definita in un assembly caricato solo nel contesto di caricamento predefinito.
Costruttori
| Nome | Descrizione |
|---|---|
| AssemblyLoadContext() |
Inizializza una nuova istanza della classe AssemblyLoadContext. |
| AssemblyLoadContext(Boolean) |
Inizializza una nuova istanza della AssemblyLoadContext classe con un valore che indica se lo scaricamento è abilitato. |
| AssemblyLoadContext(String, Boolean) |
Inizializza una nuova istanza della AssemblyLoadContext classe con un nome e un valore che indica se lo scaricamento è abilitato. |
Proprietà
| Nome | Descrizione |
|---|---|
| All |
Restituisce una raccolta di tutte le AssemblyLoadContext istanze. |
| Assemblies |
Restituisce una raccolta delle Assembly istanze caricate in AssemblyLoadContext. |
| CurrentContextualReflectionContext |
Ottiene l'oggetto AssemblyLoadContext impostato dalla chiamata più recente a EnterContextualReflection(). |
| Default |
Ottiene l'oggetto predefinito AssemblyLoadContext. Il contesto predefinito contiene l'assembly principale dell'applicazione e le relative dipendenze statiche. |
| IsCollectible |
Ottiene un valore che indica se l'oggetto AssemblyLoadContext è raccoglibile. |
| Name |
Ottenere il nome dell'oggetto AssemblyLoadContext. |
Metodi
| Nome | Descrizione |
|---|---|
| EnterContextualReflection() |
Imposta CurrentContextualReflectionContext su |
| EnterContextualReflection(Assembly) |
Imposta CurrentContextualReflectionContext sull'oggetto AssemblyLoadContext che ha caricato l'assembly. |
| Equals(Object) |
Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object) |
| Finalize() |
Consente all'oggetto di provare a liberare risorse ed eseguire altre operazioni di pulizia prima che venga recuperata da Garbage Collection. |
| GetAssemblyName(String) |
Ottiene un oggetto AssemblyName per un percorso di assembly. |
| GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
| GetLoadContext(Assembly) |
Ottiene l'oggetto contenente l'oggetto AssemblyLoadContext specificato Assembly. |
| GetType() |
Ottiene il Type dell'istanza corrente. (Ereditato da Object) |
| Load(AssemblyName) |
Quando sottoposto a override in una classe derivata, consente di risolvere un assembly in base al relativo AssemblyNameoggetto . |
| LoadFromAssemblyName(AssemblyName) |
Risolve e carica un assembly in base al relativo AssemblyNameoggetto . |
| LoadFromAssemblyPath(String) |
Carica il contenuto di un file di assembly nel percorso specificato. |
| LoadFromNativeImagePath(String, String) |
Carica il contenuto dell'immagine nativa di un file di assembly gestito nel percorso specificato. |
| LoadFromStream(Stream, Stream) |
Carica l'assembly con un'immagine basata su COFF (Common Object File Format) contenente un assembly gestito, inclusi facoltativamente i simboli per l'assembly. |
| LoadFromStream(Stream) |
Carica l'assembly con un'immagine basata su COFF (Common Object File Format) contenente un assembly gestito. |
| LoadUnmanagedDll(String) |
Consente alla classe derivata di caricare una libreria non gestita in base al nome. |
| LoadUnmanagedDllFromPath(String) |
Carica una libreria non gestita dal percorso specificato. |
| MemberwiseClone() |
Crea una copia superficiale del Objectcorrente. (Ereditato da Object) |
| SetProfileOptimizationRoot(String) |
Imposta il percorso radice in cui vengono archiviati i profili di ottimizzazione per questo contesto di carico. |
| StartProfileOptimization(String) |
Avvia l'ottimizzazione del profilo per il profilo specificato. |
| ToString() |
Restituisce la rappresentazione di stringa di questo contesto di caricamento. |
| ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |
| Unload() |
Avvia un scaricamento di .AssemblyLoadContext |
Eventi
| Nome | Descrizione |
|---|---|
| Resolving |
Si verifica quando la risoluzione di un assembly non riesce quando si tenta di caricare in questo contesto di caricamento dell'assembly. |
| ResolvingUnmanagedDll |
Si verifica quando la risoluzione di una libreria nativa ha esito negativo. |
| Unloading |
Si verifica quando l'oggetto AssemblyLoadContext viene scaricato. |