Delen via


Algoritme voor het laden van beheerde assembly's

Beheerde assembly's bevinden zich en worden geladen met een algoritme dat verschillende fasen heeft.

Alle beheerde assembly's behalve satellietassembly's en WinRT assembly's gebruiken hetzelfde algoritme.

Wanneer worden beheerde assembly's geladen?

Het meest voorkomende mechanisme voor het activeren van een beheerde assemblybelasting is een statische assembly-verwijzing. Deze verwijzingen worden door de compiler ingevoegd wanneer code een type gebruikt dat in een andere assembly is gedefinieerd. Deze assembly's worden geladen (load-by-name) indien nodig door de runtime. De exacte timing van wanneer de statische assemblyverwijzingen worden geladen, is niet opgegeven. Het kan variëren tussen runtime-versies en wordt beïnvloed door optimalisaties zoals inlining.

Het directe gebruik van de volgende API's activeert ook laden:

API Beschrijving Active AssemblyLoadContext
AssemblyLoadContext.LoadFromAssemblyName Load-by-name Het exemplaar .
AssemblyLoadContext.LoadFromAssemblyPath
AssemblyLoadContext.LoadFromNativeImagePath
Laden vanaf pad. Het exemplaar .
AssemblyLoadContext.LoadFromStream Laden vanuit object. Het exemplaar .
Assembly.LoadFile Laden vanaf pad in een nieuw AssemblyLoadContext exemplaar Het nieuwe AssemblyLoadContext exemplaar.
Assembly.LoadFrom Laden vanuit het pad in het AssemblyLoadContext.Default exemplaar.
Hiermee voegt u een AppDomain.AssemblyResolve handler toe. De handler laadt de afhankelijkheden van de assembly vanuit de map.
Het AssemblyLoadContext.Default-exemplaar.
Assembly.Load(AssemblyName)
Assembly.Load(String)
Assembly.LoadWithPartialName
Load-by-name. Afgeleid van beller.
Geef de voorkeur aan AssemblyLoadContext methoden.
Assembly.Load(Byte[])
Assembly.Load(Byte[], Byte[])
Laden van object in een nieuw AssemblyLoadContext exemplaar. Het nieuwe AssemblyLoadContext exemplaar.
Type.GetType(String)
Type.GetType(String, Boolean)
Type.GetType(String, Boolean, Boolean)
Load-by-name. Afgeleid van beller.
Geef de voorkeur aan Type.GetType methoden met een assemblyResolver argument.
Assembly.GetType Als het type name een gekwalificeerde algemene assembly-type beschrijft, activeert u een Load-by-name. Afgeleid van beller.
Geef de voorkeur Type.GetType aan bij het gebruik van namen van gekwalificeerde assemblytypen.
Activator.CreateInstance(String, String)
Activator.CreateInstance(String, String, Object[])
Activator.CreateInstance(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])
Load-by-name. Afgeleid van beller.
Geef de voorkeur aan Activator.CreateInstance methoden die een Type argument gebruiken.

Algoritme

In het volgende algoritme wordt beschreven hoe de runtime een beheerde assembly laadt.

  1. Bepaal de active AssemblyLoadContext.

  2. Voor de Load-by-name methoden laadt de active AssemblyLoadContext assembly in de volgende prioriteitsvolgorde:

  3. Voor de andere soorten belastingen laadt de active AssemblyLoadContext assembly in de volgende prioriteitsvolgorde:

    • Controleer het cache-by-name.
    • Laden vanaf het opgegeven pad of onbewerkt assembly-object. Als een assembly nieuw is geladen, wordt er een verwijzing toegevoegd aan de active AssemblyLoadContext instantie cache-by-name.
  4. Als een assembly nieuw is geladen, wordt de AppDomain.AssemblyLoad gebeurtenis in beide gevallen gegenereerd.