Delen via


Algoritme voor het laden van beheerde assembly's

Beheerde assemblies zijn geplaatst en worden geladen met een algoritme met verschillende stadia.

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

Wanneer worden beheerde assemblages 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 assemblies worden geladen (load-by-name) door de runtime indien nodig. 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 (Application Programming Interface) 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 nieuwe AssemblyLoadContext instantie 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 uit zijn map.
Het AssemblyLoadContext.Default-exemplaar.
Assembly.Load(AssemblyName)
Assembly.Load(String)
Assembly.LoadWithPartialName
Load-by-name. Afgeleid van de 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 de beller.
Geef de voorkeur aan Type.GetType methoden met een assemblyResolver argument.
Assembly.GetType Als het type name een assembly-gekwalificeerd generiek type beschrijft, activeer een Load-by-name. Afgeleid van de beller.
Geef de voorkeur aan Type.GetType bij het gebruik van assembly-gekwalificeerde typenamen.
Activator.CreateInstance(String, String)
Activator.CreateInstance(String, String, Object[])
Activator.CreateInstance(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])
Load-by-name. Afgeleid van de 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 activeAssemblyLoadContext.

  2. Voor de Load-by-name-methoden laadt de activeAssemblyLoadContext-assembly in de volgende volgorde van prioriteit:

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

  4. Als een assembly nieuw is geladen, wordt de AppDomain.AssemblyLoad gebeurtenis in beide gevallen gegenereerd.