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:
Algoritme
In het volgende algoritme wordt beschreven hoe de runtime een beheerde assembly laadt.
Bepaal de
active
AssemblyLoadContext.- Voor een statische assemblyverwijzing is het
active
AssemblyLoadContext exemplaar dat de verwijzende assembly heeft geladen. - Voorkeurs-API's maken de
active
AssemblyLoadContext expliciete api's. - Andere API's afleiden de
active
AssemblyLoadContext. Voor deze API's wordt de AssemblyLoadContext.CurrentContextualReflectionContext eigenschap gebruikt. Als de waarde isnull
, wordt het uitgestelde AssemblyLoadContext exemplaar gebruikt. - Zie de tabel in de sectie Wanneer worden beheerde assembly's geladen?
- Voor een statische assemblyverwijzing is het
Voor de
Load-by-name
methoden laadt deactive
AssemblyLoadContext assembly in de volgende prioriteitsvolgorde:- Controleer het
cache-by-name
. - Roep de functie AssemblyLoadContext.Load aan.
- Controleer de cache van het exemplaar en voer de standaardprobinglogica van de AssemblyLoadContext.Default beheerde assembly uit. Als een assembly nieuw is geladen, wordt er een verwijzing toegevoegd aan de AssemblyLoadContext.Default instantie
cache-by-name
. - Verhoog de AssemblyLoadContext.Resolving gebeurtenis voor de active AssemblyLoadContext.
- Hef de AppDomain.AssemblyResolve gebeurtenis op.
- Controleer het
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 instantiecache-by-name
.
- Controleer het
Als een assembly nieuw is geladen, wordt de AppDomain.AssemblyLoad gebeurtenis in beide gevallen gegenereerd.