AssemblyLoadContext Klasse

Definition

Stellt den Bereich zum Laden von Assemblys einer Runtime dar.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
Vererbung
AssemblyLoadContext

Hinweise

Der 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. Der 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 Isolation von Assemblys vorhanden.The AssemblyLoadContext exists primarily to provide assembly loading 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 von mehreren AppDomain-Instanzen in der .NET Framework bereitgestellt werden.It replaces the isolation mechanisms provided by multiple AppDomain instances in the .NET Framework.

Hinweis

AssemblyLoadContext bietet 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:

AnwendungsnutzungApplication usage

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

Der AssemblyLoadContext bietet 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, die Assembly durch AssemblyLoadContext aufzulösen, Sie 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. Wenn die AssemblyLoadContext.Load(AssemblyName) null zurückgibt, versucht das Lade Modul, die Assembly in die AssemblyLoadContext.Default zu laden.If the AssemblyLoadContext.Load(AssemblyName) returns null, the loader will try to load the assembly into the AssemblyLoadContext.Default.
  2. Wenn der AssemblyLoadContext.Default die Assembly nicht auflösen kann, erhält der ursprüngliche AssemblyLoadContext die 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. Die Laufzeit löst das Resolving-Ereignis aus.The runtime raises the Resolving event.

Außerdem ermöglicht die virtuelle Methode "AssemblyLoadContext.LoadUnmanagedDll(String)" 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 null zurück, was bewirkt, dass die Lauf Zeit 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.
  • Durch die Implementierung von AssemblyLoadContext.Load(AssemblyName) können neue Abhängigkeiten hinzugefügt werden, 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.

  • Dieselbe Assembly wird mehrmals in verschiedene Kontexte geladen.The same assembly is loaded multiple times into different contexts.

    • Dies kann zu verwirrenden Fehlermeldungen führen, z. b. "das Objekt vom Typ ' Sample. plugin' kann nicht in den Typ ' Sample. plugin' umgewandelt werden."This can lead to confusing error messages, for example "Unable to cast object of type 'Sample.Plugin' to type 'Sample.Plugin'."
    • 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()

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

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)

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

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

Assemblies

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

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

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

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

Name

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

Methoden

EnterContextualReflection()

Legt CurrentContextualReflectionContext auf thisAssemblyLoadContext fest.Sets CurrentContextualReflectionContext to thisAssemblyLoadContext.

EnterContextualReflection(Assembly)

Legt CurrentContextualReflectionContext auf den AssemblyLoadContext fest, der die Assembly geladen hat.Sets CurrentContextualReflectionContext to the AssemblyLoadContext which loaded the assembly.

Equals(Object)

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

(Geerbt von Object)
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)

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

GetHashCode()

Fungiert als Standardhashfunktion.Serves as the default hash function.

(Geerbt von Object)
GetLoadContext(Assembly)

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

GetType()

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

(Geerbt von Object)
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)

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

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)

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)

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)

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)

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)

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

MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.Creates a shallow copy of the current Object.

(Geerbt von Object)
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)

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

ToString()

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

Unload()

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

Ereignisse

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

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

Unloading

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

Gilt für:

Siehe auch