Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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.
Bepaal de
activeAssemblyLoadContext.- Voor een statische assemblyverwijzing is de instantie
activeAssemblyLoadContext degene die de verwijzende assembly heeft geladen. - Voorkeurs-API's maken de
activeAssemblyLoadContext expliciet. - Andere API's leiden
activeAssemblyLoadContext af. Voor deze API's wordt de AssemblyLoadContext.CurrentContextualReflectionContext eigenschap gebruikt. Als de waardenullis, wordt de afgeleide AssemblyLoadContext instantie gebruikt. - Zie de tabel in de paragraaf Wanneer worden beheerde assemblies geladen?
- Voor een statische assemblyverwijzing is de instantie
Voor de
Load-by-name-methoden laadt deactiveAssemblyLoadContext-assembly in de volgende volgorde van prioriteit:- Controleer het
cache-by-name. - Roep de functie AssemblyLoadContext.Load aan.
- Controleer de cache van het exemplaar en voer AssemblyLoadContext.Default van de beheerde assembly uit. Als een assembly nieuw wordt geladen, wordt er een verwijzing toegevoegd aan de AssemblyLoadContext.Default-instantie
cache-by-name. - Verhoog de AssemblyLoadContext.Resolving gebeurtenis voor de actieve AssemblyLoadContext.
- Activeer het AppDomain.AssemblyResolve evenement.
- Controleer het
Voor de andere soorten belastingen laadt de
activeAssemblyLoadContext assembly in de volgende prioriteitsvolgorde:- Controleer het
cache-by-name. - Als de
activeAssemblyLoadContextAssemblyLoadContext.Default is, voert u de standaardprobeerlogica voor beheerde assembly's uit. - Laden vanaf het opgegeven pad of onbewerkt assembly-object. Als een assembly recent is geladen, wordt er een verwijzing toegevoegd aan de
activeAssemblyLoadContext instantiecache-by-name.
- Controleer het
Als een assembly nieuw is geladen, wordt de AppDomain.AssemblyLoad gebeurtenis in beide gevallen gegenereerd.