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

AssemblyLoadContext Stellt einen Lade Kontext dar.The AssemblyLoadContext represents a load context. Konzeptionell erstellt ein Load-Kontext einen Bereich zum Laden, auflösen und ggf. Entladen eines Assemblysatzes.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. 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.

Der AssemblyLoadContext ist primär zum Bereitstellen der assemblybindungsisolation vorhandenThe AssemblyLoadContext exists primarily to provide assembly binding isolation. Es ermöglicht, dass mehrere Versionen der gleichen Assembly innerhalb eines einzelnen Prozesses geladen werden.It allows multiple versions of the same assembly to be loaded within a single process. Es ersetzt die Isolations Mechanismen, die AppDomain von mehreren Instanzen in der .NET Framework bereitgestellt werden.It replaces the isolation mechanisms provided by multiple AppDomain instances in the .NET Framework.

Hinweis

AssemblyLoadContextbietet keine Sicherheitsfunktionen.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 LaufzeitUsage in the runtime

Die Laufzeit implementiert zwei assemblyladekontexte:The runtime implements two assembly load contexts:

Anwendungs VerwendungApplication usage

Eine Anwendung kann eine eigene AssemblyLoadContext erstellen, um eine benutzerdefinierte Lösung für erweiterte Bindungs Szenarien zu erstellen.An application can create its own AssemblyLoadContext to create a custom solution for advanced binding scenarios. Der Schwerpunkt liegt auf der Definition von Mechanismen zur Abhängigkeitsauflösung.The customization focuses on defining dependency resolution mechanisms.

Bietet AssemblyLoadContext zwei Erweiterungs Punkte zum Implementieren der Auflösung verwalteter Assemblys:The AssemblyLoadContext provides two extension points to implement managed assembly resolution:

  1. Der AssemblyLoadContext.Load(AssemblyName) bietet die erste Möglichkeit AssemblyLoadContext , die Assembly aufzulösen, zu laden und zurückzugeben.The AssemblyLoadContext.Load(AssemblyName) provides the first chance for the AssemblyLoadContext to resolve the assembly, load it and return it. AssemblyLoadContext.Load(AssemblyName) Wenn zurück nullgegeben wird, versucht das Lade Modul, die Assembly in den AssemblyLoadContext.Defaultzu laden.If the AssemblyLoadContext.Load(AssemblyName) returns null, the loader will try to load the assembly into the AssemblyLoadContext.Default.
  2. Wenn die AssemblyLoadContext.Default Assembly nicht auflösen kann, erhält die ursprüngliche AssemblyLoadContext Gelegenheit eine zweite Möglichkeit, die Assembly aufzulösen.If the AssemblyLoadContext.Default is unable to resolve the assembly, the original AssemblyLoadContext gets a second chance to resolve the assembly. Das- Resolving Ereignis wird von der Laufzeit ausgelöst.The runtime raises the Resolving event.

Außerdem ermöglicht AssemblyLoadContext.LoadUnmanagedDll(String) die virtuelle Methode die Anpassung der standardmäßigen nicht verwalteten Assemblyauflösung.Additionally the AssemblyLoadContext.LoadUnmanagedDll(String) virtual method allows customization of the default unmanaged assembly resolution. Die Standard Implementierung gibt nullzurück, was dazu führt, dass die Runtime-Suche Ihre Standard Such Richtlinie verwendet, die für 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 einzelnen Prozess zu laden.It is not possible to load multiple versions of the runtime in a single process.

    Achtung

    Das Laden mehrerer Kopien oder verschiedener Versionen von Frameworkassemblys kann zu unerwartetem 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 Prozess Grenzen mit Remoting und/oder prozessübergreifende Kommunikation, um dieses Isolations Problem zu lösen.Use process boundaries with remoting and/or interprocess communication to solve this isolation problem.

  • Durch das Laden der Assembly kann das Testen und Debuggen erschwert werden.The timing of assembly loading can make testing and debugging difficult. Assemblys werden normalerweise geladen, ohne dass ihre Abhängigkeiten sofort aufgelöst werden.Assemblies are typically loaded without their dependencies immediately being resolved. Die Abhängigkeiten werden nach Bedarf geladen:The dependencies are loaded as they are needed:

    • Wenn Code in eine abhängige Assembly verzweigt.When code branches into a dependent assembly.
    • Wenn Code Ressourcen lädt.When code loads resources.
    • Wenn Code Assemblys explizit lädt.When code explicitly loads assemblies.
  • Die Implementierung von AssemblyLoadContext.Load(AssemblyName) kann neue Abhängigkeiten hinzufügen, die möglicherweise isoliert werden müssen, damit verschiedene Versionen vorhanden sein müssen.The implementation of AssemblyLoadContext.Load(AssemblyName) can add new dependencies which may need to be isolated to allow different versions to exist. Die natürlichste Implementierung würde diese Abhängigkeiten im Standardkontext platzieren.The most natural implementation would place these dependencies in the default context. Der sorgfältige Entwurf kann die neuen Abhängigkeiten isolieren.Careful design can isolate the new dependencies.

  • Bei der Bindungs Isolation werden mehrere Typen mit dem gleichen Typnamen erstellt.The binding isolation process creates multiple types with the same type name.

    • Dies kann zu verwirrenden Fehlermeldungen führen, z. b. "der Typ" foo. foo kann nicht in den Typ "foo. foo" umgewandelt werden.This can lead to confusing error messages, for example "type Foo.Foo cannot be cast to type Foo.Foo."
    • Das Marshalling über Isolations Grenzen hinweg ist nicht trivial.Marshaling across isolation boundaries is non-trivial. Eine typische Lösung wäre die Verwendung einer Schnittstelle, die in einer Assembly definiert ist, die nur in den standardmäßigen 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 Entladen aktiviert ist.Initializes a new instance of the AssemblyLoadContext class with a value that indicates whether unloading is enabled.

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

Initialisiert eine neue Instanz der AssemblyLoadContext-Klasse mit einem Namen und einem Wert, der angibt, ob Entladen aktiviert ist.Initializes a new instance of the AssemblyLoadContext class with a name and a value that indicates whether unloading is enabled.

Eigenschaften

All All All All

Gibt eine Sammlung aller AssemblyLoadContext-Instanzen zurück.Returns a collection of all AssemblyLoadContext instances.

Assemblies Assemblies Assemblies Assemblies

Gibt eine Sammlung der Assembly in AssemblyLoadContext geladenen Instanzen zurück.Returns a collection of the Assembly instances loaded in the AssemblyLoadContext.

CurrentContextualReflectionContext CurrentContextualReflectionContext CurrentContextualReflectionContext CurrentContextualReflectionContext

Ruft den AssemblyLoadContext ab, der durch den aktuellsten Aufruf von EnterContextualReflection() festgelegt wurde.Gets the AssemblyLoadContext set by the most recent call to EnterContextualReflection().

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

Ruft den Namen des AssemblyLoadContext ab.Get the name of the AssemblyLoadContext.

Methoden

EnterContextualReflection() EnterContextualReflection() EnterContextualReflection() EnterContextualReflection()

Legt CurrentContextualReflectionContext auf thisAssemblyLoadContext fest.Sets CurrentContextualReflectionContext to thisAssemblyLoadContext.

EnterContextualReflection(Assembly) EnterContextualReflection(Assembly) EnterContextualReflection(Assembly) EnterContextualReflection(Assembly)

Legt CurrentContextualReflectionContext auf den AssemblyLoadContext fest, der die Assembly geladen hat.Sets CurrentContextualReflectionContext to the AssemblyLoadContext which loaded the 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)
Finalize() Finalize() Finalize() Finalize()

Ermöglicht dem Objekt den Versuch, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird.Allows the object to try to free resources and perform other cleanup operations before it's reclaimed by garbage collection.

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)

Legt den Stammpfad fest, in dem die Optimierungsprofile für diesen Load-Kontext gespeichert werden.Sets the root path where the optimization profiles for this load context are stored.

StartProfileOptimization(String) StartProfileOptimization(String) StartProfileOptimization(String) StartProfileOptimization(String)

Startet die Profiloptimierung für den angegebenen Profilnamen.Starts the profile optimization for the specified profile.

ToString() ToString() ToString() ToString()

Gibt die Zeichenfolgendarstellung dieses Load-Kontexts zurück.Returns the string representation of this load context.

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

Tritt auf, wenn bei der nativen Bibliothek ein Fehler auftritt.Occurs when the resolution of a native library fails.

Unloading Unloading Unloading Unloading

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

Gilt für:

Siehe auch