AssemblyLoadContext Classe

Definizione

Rappresenta il concetto di runtime di un ambito per il caricamento di assembly.Represents the runtime's concept of a scope for assembly loading.

public ref class AssemblyLoadContext abstract
public abstract class AssemblyLoadContext
type AssemblyLoadContext = class
Public MustInherit Class AssemblyLoadContext
Ereditarietà
AssemblyLoadContext

Commenti

Il AssemblyLoadContext rappresenta un contesto di caricamento.The AssemblyLoadContext represents a load context. A livello concettuale, un contesto di caricamento crea un ambito per il caricamento, la risoluzione e potenzialmente lo scaricamento di un set di assembly.Conceptually, a load context creates a scope for loading, resolving, and potentially unloading a set of assemblies.

AssemblyLoadContext è una classe astratta.AssemblyLoadContext is an abstract class. È necessario implementare il metodo AssemblyLoadContext.Load(AssemblyName) per creare una classe concreta.The AssemblyLoadContext.Load(AssemblyName) method needs to be implemented to create a concrete class.

Il AssemblyLoadContext esiste principalmente per fornire l'isolamento del caricamento degli assembly.The AssemblyLoadContext exists primarily to provide assembly loading isolation. Consente il caricamento di più versioni dello stesso assembly all'interno di un singolo processo.It allows multiple versions of the same assembly to be loaded within a single process. Sostituisce i meccanismi di isolamento forniti da più istanze di AppDomain nel .NET Framework.It replaces the isolation mechanisms provided by multiple AppDomain instances in the .NET Framework.

Nota

AssemblyLoadContext non fornisce alcuna funzionalità di sicurezza.AssemblyLoadContext does not provide any security features. Tutto il codice ha autorizzazioni complete per il processo.All code has full permissions of the process.

Utilizzo in fase di esecuzioneUsage in the runtime

Il runtime implementa due contesti di caricamento dell'assembly:The runtime implements two assembly load contexts:

Utilizzo dell'applicazioneApplication usage

Un'applicazione può creare una propria AssemblyLoadContext per creare una soluzione personalizzata per gli scenari avanzati.An application can create its own AssemblyLoadContext to create a custom solution for advanced scenarios. La personalizzazione è incentrata sulla definizione dei meccanismi di risoluzione delle dipendenze.The customization focuses on defining dependency resolution mechanisms.

Il AssemblyLoadContext fornisce due punti di estensione per implementare la risoluzione degli assembly gestiti:The AssemblyLoadContext provides two extension points to implement managed assembly resolution:

  1. Il metodo AssemblyLoadContext.Load(AssemblyName) fornisce la prima possibilità per il AssemblyLoadContext di risolvere, caricare e restituire l'assembly.The AssemblyLoadContext.Load(AssemblyName) method provides the first chance for the AssemblyLoadContext to resolve, load, and return the assembly. Se il metodo AssemblyLoadContext.Load(AssemblyName) restituisce null, il caricatore tenta di caricare l'assembly nella AssemblyLoadContext.Default.If the AssemblyLoadContext.Load(AssemblyName) method returns null, the loader tries to load the assembly into the AssemblyLoadContext.Default.
  2. Se il AssemblyLoadContext.Default non è in grado di risolvere l'assembly, il AssemblyLoadContext originale ottiene una seconda possibilità per risolvere l'assembly.If the AssemblyLoadContext.Default is unable to resolve the assembly, the original AssemblyLoadContext gets a second chance to resolve the assembly. Il runtime genera l'evento Resolving.The runtime raises the Resolving event.

Inoltre, il AssemblyLoadContext.LoadUnmanagedDll(String) metodo virtuale consente la personalizzazione della risoluzione dell'assembly non gestito predefinita.Additionally, the AssemblyLoadContext.LoadUnmanagedDll(String) virtual method allows customization of the default unmanaged assembly resolution. L'implementazione predefinita restituisce null, che fa sì che la ricerca di runtime usi i criteri di ricerca predefiniti.The default implementation returns null, which causes the runtime search to use its default search policy. Il criterio di ricerca predefinito è sufficiente per la maggior parte degli scenari.The default search policy is sufficient for most scenarios.

Problemi tecniciTechnical challenges

  • Non è possibile caricare più versioni del runtime in un singolo processo.It is not possible to load multiple versions of the runtime in a single process.

    Attenzione

    Il caricamento di più copie o versioni diverse degli assembly del Framework può causare un comportamento imprevisto e difficile da diagnosticare.Loading multiple copies or different versions of framework assemblies can lead to unexpected and hard-to-diagnose behavior.

    Suggerimento

    Usare i limiti del processo con la comunicazione remota o interprocesso per risolvere questo problema di isolamento.Use process boundaries with remoting or interprocess communication to solve this isolation problem.

  • Il tempo di caricamento degli assembly può rendere difficoltoso il test e il debug.The timing of assembly loading can make testing and debugging difficult. Gli assembly vengono in genere caricati senza che le relative dipendenze vengano risolte immediatamente.Assemblies are typically loaded without their dependencies immediately being resolved. Le dipendenze vengono caricate in base alle esigenze:The dependencies are loaded as they are needed:

    • Quando il codice viene diramato in un assembly dipendente.When code branches into a dependent assembly.
    • Quando il codice carica le risorse.When code loads resources.
    • Quando il codice carica in modo esplicito gli assembly.When code explicitly loads assemblies.
  • L'implementazione di AssemblyLoadContext.Load(AssemblyName) può aggiungere nuove dipendenze che potrebbero dover essere isolate per consentire l'esistenza di versioni diverse.The implementation of AssemblyLoadContext.Load(AssemblyName) can add new dependencies that may need to be isolated to allow different versions to exist. L'implementazione più naturale inserirebbe queste dipendenze nel contesto predefinito.The most natural implementation would place these dependencies in the default context. Un'attenta progettazione può isolare le nuove dipendenze.Careful design can isolate the new dependencies.

  • Lo stesso assembly viene caricato più volte in contesti diversi.The same assembly is loaded multiple times into different contexts.

    • Questo può causare la confusione dei messaggi di errore, ad esempio "Impossibile eseguire il cast dell'oggetto di tipo" Sample. plugin nel tipo "Sample. plugin".This can lead to confusing error messages, for example "Unable to cast object of type 'Sample.Plugin' to type 'Sample.Plugin'".
    • Il marshalling tra i limiti di isolamento non è semplice.Marshaling across isolation boundaries is non-trivial. Una soluzione tipica consiste nell'usare un'interfaccia definita in un assembly che viene caricato solo nel contesto di caricamento predefinito.A typical solution is to use an interface defined in an assembly that's only loaded into the default load context.

Costruttori

AssemblyLoadContext()

Inizializza una nuova istanza della classe AssemblyLoadContext.Initializes a new instance of the AssemblyLoadContext class.

AssemblyLoadContext(Boolean)

Inizializza una nuova istanza della classe AssemblyLoadContext con un valore che indica se è abilitato lo scaricamento.Initializes a new instance of the AssemblyLoadContext class with a value that indicates whether unloading is enabled.

AssemblyLoadContext(String, Boolean)

Inizializza una nuova istanza della classe AssemblyLoadContext con un nome e un valore che indicano se è abilitato lo scaricamento.Initializes a new instance of the AssemblyLoadContext class with a name and a value that indicates whether unloading is enabled.

Proprietà

All

Restituisce una raccolta di tutte le istanze di AssemblyLoadContext.Returns a collection of all AssemblyLoadContext instances.

Assemblies

Restituisce una raccolta delle istanze di Assembly caricate in AssemblyLoadContext.Returns a collection of the Assembly instances loaded in the AssemblyLoadContext.

CurrentContextualReflectionContext

Ottiene l'elemento AssemblyLoadContext impostato dalla chiamata più recente a EnterContextualReflection().Gets the AssemblyLoadContext set by the most recent call to EnterContextualReflection().

Default

Ottiene l'elemento AssemblyLoadContext predefinito.Gets the default AssemblyLoadContext. Il contesto predefinito contiene l'assembly principale dell'applicazione e le relative dipendenze statiche.The default context contains the main application assembly and its static dependencies.

IsCollectible

Ottiene un valore che indica se AssemblyLoadContext è ritirabile.Gets a value that indicates whether this AssemblyLoadContext is collectible.

Name

Ottenere il nome di AssemblyLoadContext.Get the name of the AssemblyLoadContext.

Metodi

EnterContextualReflection()

Imposta CurrentContextualReflectionContext su thisAssemblyLoadContext.Sets CurrentContextualReflectionContext to thisAssemblyLoadContext.

EnterContextualReflection(Assembly)

Imposta CurrentContextualReflectionContext sull'elemento AssemblyLoadContext che ha caricato l'assembly.Sets CurrentContextualReflectionContext to the AssemblyLoadContext which loaded the assembly.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.Determines whether the specified object is equal to the current object.

(Ereditato da Object)
Finalize()

Consente all'oggetto di provare a liberare risorse ed eseguire altre operazioni di pulizia prima che l'oggetto stesso venga recuperato da Garbage Collection.Allows the object to try to free resources and perform other cleanup operations before it's reclaimed by garbage collection.

GetAssemblyName(String)

Ottiene un AssemblyName per un percorso di assembly.Gets an AssemblyName for an assembly path.

GetHashCode()

Funge da funzione hash predefinita.Serves as the default hash function.

(Ereditato da Object)
GetLoadContext(Assembly)

Ottiene l'elemento AssemblyLoadContext contenente il valore Assembly specificato.Gets the AssemblyLoadContext containing the specified Assembly.

GetType()

Ottiene l'oggetto Type dell'istanza corrente.Gets the Type of the current instance.

(Ereditato da Object)
Load(AssemblyName)

Quando sottoposto a override in una classe derivata, consente a un assembly di essere risolto e caricato in base al suo AssemblyName.When overridden in a derived class, allows an assembly to be resolved and loaded based on its AssemblyName.

LoadFromAssemblyName(AssemblyName)

Risolve e carica un assembly dato il relativo oggetto AssemblyName.Resolves and loads an assembly given its AssemblyName.

LoadFromAssemblyPath(String)

Carica il contenuto di un file di assembly nel percorso specificato.Loads the contents of an assembly file on the specified path.

LoadFromNativeImagePath(String, String)

Carica il contenuto dell'immagine nativa di un file di assembly gestito nel percorso specificato.Loads the contents of the native image of a managed assembly file on the specified path.

LoadFromStream(Stream)

Carica l'assembly con un'immagine in formato COFF (Common Object File Format) contenente un assembly gestito.Loads the assembly with a common object file format (COFF)-based image containing a managed assembly.

LoadFromStream(Stream, Stream)

Carica l'assembly con un'immagine in formato COFF (Common Object File Format) che contiene un assembly gestito e include facoltativamente i simboli per l'assembly.Loads the assembly with a common object file format (COFF)-based image containing a managed assembly, optionally including symbols for the assembly.

LoadUnmanagedDll(String)

Consente alla classe derivata di caricare una libreria non gestita in base al nome.Allows derived class to load an unmanaged library by name.

LoadUnmanagedDllFromPath(String)

Carica una libreria non gestita dal percorso specificato.Loads an unmanaged library from the specified path.

MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

(Ereditato da Object)
SetProfileOptimizationRoot(String)

Imposta il percorso radice in cui vengono archiviati i profili di ottimizzazione per questo contesto di caricamento.Sets the root path where the optimization profiles for this load context are stored.

StartProfileOptimization(String)

Avvia l'ottimizzazione del profilo per il profilo specificato.Starts the profile optimization for the specified profile.

ToString()

Restituisce la rappresentazione stringa di questo contesto di caricamento.Returns the string representation of this load context.

Unload()

Avvia uno scaricamento di questo AssemblyLoadContext.Initiates an unload of this AssemblyLoadContext.

Eventi

Resolving

Si verifica se la risoluzione di un assembly ha esito negativo quando si tenta di caricare in questo contesto di caricamento dell'assembly.Occurs when the resolution of an assembly fails when attempting to load into this assembly load context.

ResolvingUnmanagedDll

Si verifica quando la risoluzione di una libreria nativa ha esito negativo.Occurs when the resolution of a native library fails.

Unloading

Si verifica quando AssemblyLoadContext viene scaricato.Occurs when the AssemblyLoadContext is unloaded.

Si applica a

Vedi anche