Algoritmus načítání spravovaných sestavení
Spravovaná sestavení se nacházejí a načítají pomocí algoritmu, který má různé fáze.
Všechna spravovaná sestavení s výjimkou satelitních sestavení a WinRT
sestavení používají stejný algoritmus.
Kdy jsou spravovaná sestavení načtena?
Nejběžnějším mechanismem pro aktivaci zatížení spravovaného sestavení je statický odkaz na sestavení. Tyto odkazy kompilátor vloží pokaždé, když kód používá typ definovaný v jiném sestavení. Tato sestavení se načtou (load-by-name
) podle potřeby modulu runtime. Přesné načasování načtení odkazů na statické sestavení není zadané. Může se lišit mezi verzemi modulu runtime a je ovlivněn optimalizacemi, jako je vkládání.
Přímé použití následujících rozhraní API také aktivuje načtení:
Algoritmus
Následující algoritmus popisuje, jak modul runtime načte spravované sestavení.
Určete
active
AssemblyLoadContext.- U statického odkazu na sestavení je instance,
active
AssemblyLoadContext která načetla odkazující sestavení. - Upřednostňovaná rozhraní API činí explicitní
active
AssemblyLoadContext . - Další rozhraní API odvodí
active
AssemblyLoadContext. Pro tato rozhraní API se AssemblyLoadContext.CurrentContextualReflectionContext vlastnost používá. Pokud jenull
jeho hodnota , použije se odvozená AssemblyLoadContext instance. - Podívejte se na tabulku v části Kdy jsou načtena spravovaná sestavení?
- U statického odkazu na sestavení je instance,
Load-by-name
Pro metody načteactive
AssemblyLoadContext sestavení v následujícím pořadí priority:- Zkontrolujte jeho
cache-by-name
. - Volejte AssemblyLoadContext.Load funkci.
- Zkontrolujte mezipaměť instance a spusťte výchozí logiku AssemblyLoadContext.Default sondování spravovaného sestavení. Pokud je sestavení nově načteno, přidá AssemblyLoadContext.Default se do instance
cache-by-name
odkaz . - Vyvolá událost AssemblyLoadContext.Resolving pro aktivní AssemblyLoadContext.
- Vyvolání AppDomain.AssemblyResolve události
- Zkontrolujte jeho
U ostatních typů zatížení načte
active
AssemblyLoadContext sestavení v následujícím pořadí priority:- Zkontrolujte jeho
cache-by-name
. - Načtení ze zadané cesty nebo nezpracovaného objektu sestavení. Pokud je sestavení nově načteno, přidá
active
AssemblyLoadContext se do instancecache-by-name
odkaz .
- Zkontrolujte jeho
V obou případech, pokud je sestavení nově načteno, AppDomain.AssemblyLoad je vyvolána událost.