AssemblyLoadContext AssemblyLoadContext AssemblyLoadContext AssemblyLoadContext Class

Definition

Stellt den Bindungsbereich einer Runtime dar.Represents the runtime's concept of a scope for binding. Diese Klasse ist abstrakt.This class is abstract.

public ref class AssemblyLoadContext abstract
public abstract class AssemblyLoadContext
type AssemblyLoadContext = class
Public MustInherit Class AssemblyLoadContext
Vererbung
AssemblyLoadContextAssemblyLoadContextAssemblyLoadContextAssemblyLoadContext

Hinweise

Die AssemblyLoadContext stellt einen Load-Kontext.The AssemblyLoadContext represents a load context. Im Prinzip wird ein Load-Kontext einen Bereich für das Laden, Auflösung und entladen möglicherweise eine Reihe von Assemblys erstellt.Conceptually, a load context creates a scope for loading, resolving, and potentially unloading a set of assemblies.

AssemblyLoadContext ist eine abstrakte Klasse.AssemblyLoadContext is an abstract class. Die AssemblyLoadContext.Load(AssemblyName) muss implementiert werden, um eine konkrete Klasse zu erstellen.The AssemblyLoadContext.Load(AssemblyName) needs to be implemented to create a concrete class.

Die AssemblyLoadContext vorhanden ist, in erster Linie um die Isolation für die Assemblybindung zu bieten.The AssemblyLoadContext exists primarily to provide assembly binding isolation. Sie können mehrere Versionen derselben Assembly innerhalb eines einzelnen Prozesses geladen werden.It allows multiple versions of the same assembly to be loaded within a single process. Er ersetzt die Isolationsmechanismen von mehreren AppDomain -Instanzen in .NET Framework.It replaces the isolation mechanisms provided by multiple AppDomain instances in the .NET Framework.

Hinweis

AssemblyLoadContext nicht bietet alle Sicherheitsfeatures.AssemblyLoadContext does not provide any security features. Der gesamte Code verfügt über vollständige Berechtigungen für den Prozess.All code has full permissions of the process.

Verwendung in der runtimeUsage in the runtime

Die Runtime implementiert zwei Assembly-Load-Kontexten:The runtime implements two assembly load contexts:

AnwendungsnutzungApplication usage

Erstellen einer Anwendung kann eine eigene AssemblyLoadContext um eine benutzerdefinierte Lösung für erweiterte Szenarien Bindung zu erstellen.An application can create its own AssemblyLoadContext to create a custom solution for advanced binding scenarios. Definieren der Abhängigkeit benötigt die Anpassung im Mittelpunkt.The customization focuses on defining dependency resolution mechanisms.

Die AssemblyLoadContext bietet zwei Erweiterungspunkte, um verwaltete Assembly-Auflösung zu implementieren:The AssemblyLoadContext provides two extension points to implement managed assembly resolution:

  1. Die AssemblyLoadContext.Load(AssemblyName) bietet der ersten Gelegenheit für die AssemblyLoadContext zu laden und zurückgeben, um die Assembly zu beheben.The AssemblyLoadContext.Load(AssemblyName) provides the first chance for the AssemblyLoadContext to resolve the assembly, load it and return it. Wenn die AssemblyLoadContext.Load(AssemblyName) gibt null, das Ladeprogramm wird versucht, beim Laden der Assembly in den AssemblyLoadContext.Default.If the AssemblyLoadContext.Load(AssemblyName) returns null, the loader will try to load the assembly into the AssemblyLoadContext.Default.
  2. Wenn die AssemblyLoadContext.Default die Assembly, die ursprüngliche nicht auflösen kann AssemblyLoadContext Ruft eine zweite Chance, die Assembly nicht aufgelöst.If the AssemblyLoadContext.Default is unable to resolve the assembly, the original AssemblyLoadContext gets a second chance to resolve the assembly. Löst die Laufzeit die Resolving Ereignis.The runtime raises the Resolving event.

Darüber hinaus die AssemblyLoadContext.LoadUnmanagedDll(String) virtuelle Methode ermöglicht die Anpassung der Auflösung des nicht verwalteten Standard-Assembly.Additionally the AssemblyLoadContext.LoadUnmanagedDll(String) virtual method allows customization of the default unmanaged assembly resolution. Die Standardimplementierung gibt null, der bewirkt, dass der Common Language Runtime-Suche auf die Standardrichtlinie für die Suche verwenden, die meisten Szenarien ausreichend ist.The default implementation returns null, which causes the runtime search to use its default search policy which is sufficient for most scenarios.

Technische HerausforderungenTechnical challenges

  • Es ist nicht möglich, mehrere Versionen der Laufzeit in einem einzigen Prozess laden.It is not possible to load multiple versions of the runtime in a single process.

    Achtung

    Laden mehrere Kopien oder verschiedene Versionen von Framework-Assemblys kann zu unerwarteten und schwer zu diagnostizieren Verhalten führen.Loading multiple copies or different versions of framework assemblies can lead to unexpected and hard to diagnose behavior.

    Tipp

    Verwenden Sie zur Lösung dieses Problems Isolation Prozessgrenzen mit Remoting und/oder prozessübergreifende Kommunikation.Use process boundaries with remoting and/or interprocess communication to solve this isolation problem.

  • Der Zeitpunkt zum Laden von Assemblys kann erschweren testen und Debuggen.The timing of assembly loading can make testing and debugging difficult. Assemblys werden in der Regel geladen, ohne ihre Abhängigkeiten, die sofort behoben werden.Assemblies are typically loaded without their dependencies immediately being resolved. Die Abhängigkeiten werden geladen, wenn sie benötigt werden:The dependencies are loaded as they are needed:

    • Wenn der code in eine abhängige Assembly Branches.When code branches into a dependent assembly.
    • Wenn Code für Ressourcen lädt.When code loads resources.
    • Wenn Code explizit Assemblys geladen wird.When code explicitly loads assemblies.
  • Die Implementierung der AssemblyLoadContext.Load(AssemblyName) können neue Abhängigkeiten, die unterschiedliche Versionen vorhanden sein können isoliert werden müssen möglicherweise hinzufügen.The implementation of AssemblyLoadContext.Load(AssemblyName) can add new dependencies which may need to be isolated to allow different versions to exist. Die naheliegendste Implementierung würde diese Abhängigkeiten in den Standardkontext platzieren.The most natural implementation would place these dependencies in the default context. Sorgfältigen Entwurf kann neuen Abhängigkeiten isolieren.Careful design can isolate the new dependencies.

  • Die Bindung Isolation-Prozess erstellt mehrere Typen mit den gleichen Typnamen.The binding isolation process creates multiple types with the same type name.

    • Dies kann zu verwirrenden Fehlermeldungen führen, z. B. "Foo.Foo-Typ kann nicht umgewandelt werden Foo.Foo geben."This can lead to confusing error messages, for example "type Foo.Foo cannot be cast to type Foo.Foo."
    • Marshalling über Isolationsgrenzen hinweg ist nicht trivial.Marshaling across isolation boundaries is non-trivial. Eine typische Lösung wäre eine andere Schnittstelle definiert, die in einer Assembly, die nur in den Standard-Load-Kontext geladen wird.A typical solution would be to use an interface defined in an assembly which is only loaded into the default load context.

Konstruktoren

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

Initialisiert eine neue Instanz der AssemblyLoadContext-Klasse.Initializes a new instance of the AssemblyLoadContext class.

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

Initialisiert eine neue Instanz der AssemblyLoadContext-Klasse mit einem Wert, der angibt, ob die Garbage Collection aktiviert ist.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)

Eigenschaften

All All All All
Assemblies Assemblies Assemblies Assemblies
CurrentContextualReflectionContext CurrentContextualReflectionContext CurrentContextualReflectionContext CurrentContextualReflectionContext
Default Default Default Default

Ruft den standardmäßigen AssemblyLoadContext ab.Gets the default AssemblyLoadContext. Der Standardkontext enthält die Hauptassembly der Anwendung und ihre statischen Abhängigkeiten.The default context contains the main application assembly and its static dependencies.

IsCollectible IsCollectible IsCollectible IsCollectible

Ruft einen Wert ab, der angibt, ob dieser AssemblyLoadContext entladbar ist.Gets a value that indicates whether this AssemblyLoadContext is collectible.

Name Name Name Name

Methoden

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

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.Determines whether the specified object is equal to the current object.

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

Diese Eigenschaft ruft für einen Assemblypfad eine AssemblyName-Klasse ab.Gets an AssemblyName for an assembly path.

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

Fungiert als Standardhashfunktion.Serves as the default hash function.

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

Diese Methode ruft die AssemblyLoadContext-Klasse ab, die die angegebene Assembly-Klasse enthält.Gets the AssemblyLoadContext containing the specified Assembly.

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

Ruft den Type der aktuellen Instanz ab.Gets the Type of the current instance.

(Inherited from Object)
Load(AssemblyName) Load(AssemblyName) Load(AssemblyName) Load(AssemblyName)

Bei Überschreibung in einer abgeleiteten Klasse kann eine Assembly aufgelöst und basierend auf dem AssemblyName geladen werden.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)

Löst eine Assembly auf und lädt sie mit ihrem AssemblyName.Resolves and loads an assembly given its AssemblyName.

LoadFromAssemblyPath(String) LoadFromAssemblyPath(String) LoadFromAssemblyPath(String) LoadFromAssemblyPath(String)

Lädt den Inhalt einer Assemblydatei mit dem angegebenen Pfad.Loads the contents of an assembly file on the specified path.

LoadFromNativeImagePath(String, String) LoadFromNativeImagePath(String, String) LoadFromNativeImagePath(String, String) LoadFromNativeImagePath(String, String)

Lädt den Inhalt des nativen Images einer verwalteten Assemblydatei im angegebenen Pfad.Loads the contents of the native image of a managed assembly file on the specified path.

LoadFromStream(Stream) LoadFromStream(Stream) LoadFromStream(Stream) LoadFromStream(Stream)

Lädt die Assembly mit einem COFF (Common Object File Format)-Image, das eine verwaltete Assembly enthält.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)

Lädt die Assembly mit einem COFF-basierten Image (Common Object File Format), das eine verwaltete Assembly und optional Symbole dafür enthält.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)

Diese Methode erlaubt einer abgeleiteten Klasse, eine nicht verwaltete Bibliothek anhand ihres Namens zu laden.Allows derived class to load an unmanaged library by name.

LoadUnmanagedDllFromPath(String) LoadUnmanagedDllFromPath(String) LoadUnmanagedDllFromPath(String) LoadUnmanagedDllFromPath(String)

Diese Methode lädt eine nicht verwaltete Bibliothek aus dem angegebenen Pfad.Loads an unmanaged library from the specified path.

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

Erstellt eine flache Kopie des aktuellen Object.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()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.Returns a string that represents the current object.

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

Initiiert eine Entladung dieses AssemblyLoadContext.Initiates an unload of this AssemblyLoadContext.

Ereignisse

Resolving Resolving Resolving Resolving

Tritt auf, wenn die Auflösung einer Assembly beim Versuch fehlschlägt, sie in diesen Assemblyladekontext zu laden.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

Tritt auf, wenn der AssemblyLoadContext entladen wird.Occurs when the AssemblyLoadContext is unloaded.

Gilt für:

Siehe auch