AssemblyLoadContext AssemblyLoadContext AssemblyLoadContext AssemblyLoadContext Class

Definizione

Rappresenta il concetto di runtime di un ambito per l'associazione.Represents the runtime's concept of a scope for binding. Questa classe è astratta.This class is abstract.

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

Commenti

Il AssemblyLoadContext rappresenta un contesto di caricamento.The AssemblyLoadContext represents a load context. Concettualmente, un contesto di caricamento crea un ambito per il caricamento, 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. Il AssemblyLoadContext.Load(AssemblyName) deve essere implementata per creare una classe concreta.The AssemblyLoadContext.Load(AssemblyName) needs to be implemented to create a concrete class.

Il AssemblyLoadContext esiste principalmente per fornire isolamento dell'associazione di assembly.The AssemblyLoadContext exists primarily to provide assembly binding isolation. Consente più versioni dello stesso assembly da caricare in 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ù AppDomain varianti in .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 dispone di autorizzazioni complete del processo.All code has full permissions of the process.

Utilizzo in fase di esecuzioneUsage in the runtime

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

Utilizzo dell'applicazioneApplication usage

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

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

  1. Il AssemblyLoadContext.Load(AssemblyName) fornisce la prima opportunità per il AssemblyLoadContext per risolvere l'assembly, caricarlo e restituirlo.The AssemblyLoadContext.Load(AssemblyName) provides the first chance for the AssemblyLoadContext to resolve the assembly, load it and return it. Se il AssemblyLoadContext.Load(AssemblyName) restituisce null, il caricatore tenterà di caricare l'assembly nel AssemblyLoadContext.Default.If the AssemblyLoadContext.Load(AssemblyName) returns null, the loader will try to load the assembly into the AssemblyLoadContext.Default.
  2. Se il AssemblyLoadContext.Default non riesce a risolvere l'assembly, originale AssemblyLoadContext 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 la Resolving evento.The runtime raises the Resolving event.

Inoltre il AssemblyLoadContext.LoadUnmanagedDll(String) metodo virtuale che consente la personalizzazione della risoluzione di assembly predefinita non gestita.Additionally the AssemblyLoadContext.LoadUnmanagedDll(String) virtual method allows customization of the default unmanaged assembly resolution. L'implementazione predefinita restituisce null, in modo che la ricerca di runtime da usare i criteri di ricerca predefiniti che è sufficienti per la maggior parte degli scenari.The default implementation returns null, which causes the runtime search to use its default search policy which is sufficient for most scenarios.

Sfide tecnicheTechnical challenges

  • Non è possibile caricare più versioni del runtime in un unico 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 di assembly del framework può causare imprevisti e difficili da diagnosticare comportamento.Loading multiple copies or different versions of framework assemblies can lead to unexpected and hard to diagnose behavior.

    Suggerimento

    Usare i limiti dei processi con .NET remoting e/o la comunicazione interprocesso per risolvere questo problema di isolamento.Use process boundaries with remoting and/or interprocess communication to solve this isolation problem.

  • Al momento del caricamento di assembly può complicare la verifica e debug.The timing of assembly loading can make testing and debugging difficult. Gli assembly vengono in genere caricati senza le relative dipendenze da risolvere immediatamente.Assemblies are typically loaded without their dependencies immediately being resolved. Le dipendenze vengono caricate quando sono necessari:The dependencies are loaded as they are needed:

    • Quando il codice di rami in un assembly dipendente.When code branches into a dependent assembly.
    • Quando codice carica le risorse.When code loads resources.
    • Quando il codice in modo esplicito gli assembly di caricamenti.When code explicitly loads assemblies.
  • L'implementazione di AssemblyLoadContext.Load(AssemblyName) possono aggiungere nuove dipendenze che devono essere isolate per consentire alle versioni diverse di esistere.The implementation of AssemblyLoadContext.Load(AssemblyName) can add new dependencies which may need to be isolated to allow different versions to exist. L'implementazione più semplice inserirà tali dipendenze nel contesto predefinito.The most natural implementation would place these dependencies in the default context. Un'attenta progettazione consente di isolare le dipendenze di nuovo.Careful design can isolate the new dependencies.

  • Il processo di associazione isolamento consente di creare più tipi con lo stesso nome di tipo.The binding isolation process creates multiple types with the same type name.

    • Questo può causare confusione i messaggi di errore, ad esempio "tipo Foo.Foo non può essere convertito nel tipo Foo.Foo".This can lead to confusing error messages, for example "type Foo.Foo cannot be cast to type Foo.Foo."
    • Marshalling attraverso i limiti di isolamento è considerevole.Marshaling across isolation boundaries is non-trivial. Una tipica soluzione, è possibile usare un'interfaccia definita in un assembly che viene caricato solo nel contesto di caricamento predefinito.A typical solution would be to use an interface defined in an assembly which is only loaded into the default load context.

Costruttori

AssemblyLoadContext() AssemblyLoadContext() AssemblyLoadContext() AssemblyLoadContext()

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

AssemblyLoadContext(Boolean) AssemblyLoadContext(Boolean) AssemblyLoadContext(Boolean) AssemblyLoadContext(Boolean)

Inizializza una nuova istanza della classe AssemblyLoadContext con un valore che indica se è la Garbage Collection è abilitata.Initializes a new instance of the AssemblyLoadContext class with a value that indicates whether garbage collection is enabled.

AssemblyLoadContext(String, Boolean) AssemblyLoadContext(String, Boolean) AssemblyLoadContext(String, Boolean) AssemblyLoadContext(String, Boolean)

Proprietà

All All All All
Assemblies Assemblies Assemblies Assemblies
CurrentContextualReflectionContext CurrentContextualReflectionContext CurrentContextualReflectionContext CurrentContextualReflectionContext
Default Default Default 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 IsCollectible IsCollectible IsCollectible

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

Name Name Name Name

Metodi

EnterContextualReflection() EnterContextualReflection() EnterContextualReflection() EnterContextualReflection()
EnterContextualReflection(Assembly) EnterContextualReflection(Assembly) EnterContextualReflection(Assembly) EnterContextualReflection(Assembly)
Equals(Object) Equals(Object) Equals(Object) Equals(Object)

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

(Inherited from Object)
GetAssemblyName(String) GetAssemblyName(String) GetAssemblyName(String) GetAssemblyName(String)

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

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

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

(Inherited from Object)
GetLoadContext(Assembly) GetLoadContext(Assembly) GetLoadContext(Assembly) GetLoadContext(Assembly)

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

GetType() GetType() GetType() GetType()

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

(Inherited from Object)
Load(AssemblyName) Load(AssemblyName) Load(AssemblyName) 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) LoadFromAssemblyName(AssemblyName) LoadFromAssemblyName(AssemblyName) LoadFromAssemblyName(AssemblyName)

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

LoadFromAssemblyPath(String) LoadFromAssemblyPath(String) LoadFromAssemblyPath(String) 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) LoadFromNativeImagePath(String, String) LoadFromNativeImagePath(String, String) 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) LoadFromStream(Stream) LoadFromStream(Stream) 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) LoadFromStream(Stream, Stream) LoadFromStream(Stream, Stream) 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) LoadUnmanagedDll(String) LoadUnmanagedDll(String) 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) LoadUnmanagedDllFromPath(String) LoadUnmanagedDllFromPath(String) LoadUnmanagedDllFromPath(String)

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

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

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

(Inherited from Object)
SetProfileOptimizationRoot(String) SetProfileOptimizationRoot(String) SetProfileOptimizationRoot(String) SetProfileOptimizationRoot(String)
StartProfileOptimization(String) StartProfileOptimization(String) StartProfileOptimization(String) StartProfileOptimization(String)
ToString() ToString() ToString() ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.Returns a string that represents the current object.

(Inherited from Object)
Unload() Unload() Unload() Unload()

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

Eventi

Resolving Resolving Resolving 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 ResolvingUnmanagedDll ResolvingUnmanagedDll ResolvingUnmanagedDll
Unloading Unloading Unloading Unloading

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

Si applica a

Vedi anche