AssemblyLoadContext Klas

Definitie

Vertegenwoordigt het concept van de runtime van een bereik voor het laden van assembly's.

public ref class AssemblyLoadContext
public ref class AssemblyLoadContext abstract
public class AssemblyLoadContext
public abstract class AssemblyLoadContext
type AssemblyLoadContext = class
Public Class AssemblyLoadContext
Public MustInherit Class AssemblyLoadContext
Overname
AssemblyLoadContext

Opmerkingen

De AssemblyLoadContext vertegenwoordigt een laadcontext. Conceptueel maakt een belastingcontext een bereik voor het laden, oplossen en lossen van een set assembly's.

Het AssemblyLoadContext bestaat voornamelijk om isolatie van assemblage laden te bieden. Hiermee kunnen meerdere versies van dezelfde assembly binnen één proces worden geladen. Het vervangt de isolatiemechanismen die worden geleverd door meerdere AppDomain exemplaren in .NET Framework.

Note

Gebruik in de runtime

De runtime implementeert twee assembly-belastingcontexten:

  • AssemblyLoadContext.Default vertegenwoordigt de standaardcontext van de runtime, die wordt gebruikt voor de hoofdassembly van de toepassing en de statische afhankelijkheden.
  • De Assembly.LoadFile(String) methode isoleert de assemblies die worden geladen door de eenvoudigste AssemblyLoadContext te instantiëren. Het heeft een simplistisch isolatieschema dat elke assembly in zijn eigen AssemblyLoadContext geheel laadt zonder afhankelijkheidsresolutie.

Toepassingsgebruik

Een toepassing kan een eigen AssemblyLoadContext toepassing maken om een aangepaste oplossing te maken voor geavanceerde scenario's. De aanpassing is gericht op het definiëren van mechanismen voor afhankelijkheidsoplossing.

De AssemblyLoadContext oplossing biedt twee uitbreidingspunten voor het implementeren van beheerde assembly-resolutie:

  1. De methode AssemblyLoadContext.Load(AssemblyName) biedt de eerste mogelijkheid voor AssemblyLoadContext om de assembly op te lossen, te laden en te retourneren. Als de AssemblyLoadContext.Load(AssemblyName) methode null retourneert, probeert het laadprogramma de assembly in de AssemblyLoadContext.Default te laden.
  2. Als de AssemblyLoadContext.Default de assembly niet kan oplossen, krijgt de oorspronkelijke AssemblyLoadContext een tweede kans om de assembly op te lossen. De runtime genereert de Resolving gebeurtenis.

Bovendien kan met de AssemblyLoadContext.LoadUnmanagedDll(String) virtuele methode de standaardoplossing voor niet-beheerde assembly's worden aangepast. De standaard implementatie retourneert null, waardoor de runtime-zoekopdracht het standaardzoekbeleid gebruikt. Het standaardzoekbeleid is voldoende voor de meeste scenario's.

Technische uitdagingen

  • Het is niet mogelijk om meerdere versies van de runtime in één proces te laden.

    Caution

    Het laden van meerdere kopieën of verschillende versies van frameworkassembly's kan leiden tot onverwacht en moeilijk te diagnosticeren gedrag.

    Tip

    Gebruik procesgrenzen met externe communicatie of interprocescommunicatie om dit isolatieprobleem op te lossen.

  • De timing van het laden van assembly's kan het testen en foutopsporing moeilijk maken. Assemblies worden doorgaans geladen zonder dat hun afhankelijkheden onmiddellijk worden opgelost. De afhankelijkheden worden geladen wanneer ze nodig zijn:

    • Wanneer code vertakt naar een afhankelijke assemblage.
    • Wanneer de code resources laadt.
    • Wanneer code expliciet assemblages laadt.
  • De implementatie van AssemblyLoadContext.Load(AssemblyName) kan nieuwe afhankelijkheden toevoegen die mogelijk moeten worden geïsoleerd om verschillende versies toe te staan. De meest natuurlijke implementatie plaatst deze afhankelijkheden in de standaardcontext. Zorgvuldig ontwerp kan de nieuwe afhankelijkheden isoleren.

  • Dezelfde assembly wordt meerdere keren in verschillende contexten geladen.

    • Dit kan leiden tot verwarrende foutberichten, bijvoorbeeld 'Kan het object van het type 'Sample.Plugin' niet casten naar type 'Sample.Plugin''.
    • Het verwerken van gegevens over isolatiebarrières is een complexe uitdaging. Een typische oplossing is het gebruik van een interface die is gedefinieerd in een assembly die alleen in de standaardbelastingscontext wordt geladen.

Constructors

Name Description
AssemblyLoadContext()

Initialiseert een nieuw exemplaar van de AssemblyLoadContext klasse.

AssemblyLoadContext(Boolean)

Initialiseert een nieuw exemplaar van de AssemblyLoadContext klasse met een waarde die aangeeft of lossen is ingeschakeld.

AssemblyLoadContext(String, Boolean)

Initialiseert een nieuw exemplaar van de AssemblyLoadContext klasse met een naam en een waarde die aangeeft of lossen is ingeschakeld.

Eigenschappen

Name Description
All

Retourneert een verzameling van alle AssemblyLoadContext exemplaren.

Assemblies

Hiermee wordt een verzameling geretourneerd van de Assembly exemplaren die zijn geladen in de AssemblyLoadContext.

CurrentContextualReflectionContext

Hiermee haalt u de AssemblyLoadContext set op door de meest recente aanroep naar EnterContextualReflection().

Default

Hiermee haalt u de standaardwaarde AssemblyLoadContextop. De standaardcontext bevat de hoofdtoepassingsassembly en de bijbehorende statische afhankelijkheden.

IsCollectible

Hiermee wordt een waarde opgehaald die aangeeft of dit AssemblyLoadContext verzamelbaar is.

Name

Haal de naam van de AssemblyLoadContext.

Methoden

Name Description
EnterContextualReflection()

Wordt ingesteld CurrentContextualReflectionContext op thisAssemblyLoadContext.

EnterContextualReflection(Assembly)

Hiermee stelt u CurrentContextualReflectionContext de AssemblyLoadContext assembly in die is geladen.

Equals(Object)

Bepaalt of het opgegeven object gelijk is aan het huidige object.

(Overgenomen van Object)
Finalize()

Hiermee kan het object resources vrijmaken en andere opschoonbewerkingen uitvoeren voordat het wordt vrijgemaakt door garbagecollection.

GetAssemblyName(String)

Hiermee haalt u een AssemblyName voor een assemblypad op.

GetHashCode()

Fungeert als de standaardhashfunctie.

(Overgenomen van Object)
GetLoadContext(Assembly)

Hiermee haalt u het AssemblyLoadContext opgegeven Assemblybestand op.

GetType()

Hiermee haalt u de Type huidige instantie op.

(Overgenomen van Object)
Load(AssemblyName)

Wanneer deze wordt overschreven in een afgeleide klasse, kan een assembly worden omgezet op basis van de AssemblyNamebijbehorende.

LoadFromAssemblyName(AssemblyName)

Lost een assembly op en laadt deze op basis van het AssemblyName.

LoadFromAssemblyPath(String)

Laadt de inhoud van een assemblybestand op het opgegeven pad.

LoadFromNativeImagePath(String, String)

Laadt de inhoud van de systeemeigen installatiekopieën van een beheerd assemblybestand op het opgegeven pad.

LoadFromStream(Stream, Stream)

Laadt de assembly met een op COFF gebaseerde installatiekopie (Common Object File Format) die een beheerde assembly bevat, eventueel ook symbolen voor de assembly.

LoadFromStream(Stream)

Laadt de assembly met een op COFF gebaseerde installatiekopie (Common Object File Format) die een beheerde assembly bevat.

LoadUnmanagedDll(String)

Hiermee kan een afgeleide klasse een niet-beheerde bibliotheek op naam laden.

LoadUnmanagedDllFromPath(String)

Laadt een niet-beheerde bibliotheek vanaf het opgegeven pad.

MemberwiseClone()

Hiermee maakt u een ondiepe kopie van de huidige Object.

(Overgenomen van Object)
SetProfileOptimizationRoot(String)

Hiermee stelt u het hoofdpad in waarin de optimalisatieprofielen voor deze belastingcontext worden opgeslagen.

StartProfileOptimization(String)

Hiermee start u de profieloptimalisatie voor het opgegeven profiel.

ToString()

Retourneert de tekenreeksweergave van deze laadcontext.

ToString()

Retourneert een tekenreeks die het huidige object vertegenwoordigt.

(Overgenomen van Object)
Unload()

Hiermee wordt een uitlading gestart AssemblyLoadContext.

gebeurtenis

Name Description
Resolving

Treedt op wanneer de resolutie van een assembly mislukt bij het laden in deze assemblybelastingcontext.

ResolvingUnmanagedDll

Treedt op wanneer de oplossing van een systeemeigen bibliotheek mislukt.

Unloading

Treedt op wanneer het AssemblyLoadContext wordt verwijderd.

Van toepassing op

Zie ook