AssemblyLoadContext Classe

Definizione

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

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:

  1. 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.
  2. 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 thisAssemblyLoadContext.

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.

Si applica a

Vedi anche