Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Spravovaná sestavení jsou lokalizována a načítána pomocí algoritmu s několika různými fázemi.
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 běhového prostředí. Přesný čas načtení odkazů na statické sestavení není specifikován. 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í:
Důležité
Na rozdíl od rozhraní .NET Framework assemblyFile je parametr Assembly.LoadFrom považován za cestu k souboru v .NET, nikoli identifikátor URI. V rozhraní .NET Framework můžete předat identifikátor URI souboru (například file:///C:/path/to/assembly.dll), například zkonstruovaný z Assembly.CodeBase) a sestavení se úspěšně načte. V rozhraní .NET se hodnota assemblyFile předá do Path.GetFullPath, který nesprávně zpracovává URI, takže načítání selže. Pokud již máte řetězec identifikátoru URI souboru, nejprve vytvořte Uri instanci a pomocí jeho LocalPath vlastnosti získejte cestu k souboru před voláním Assembly.LoadFrom. Chcete-li získat cestu k souboru již načteného sestavení, použijte Assembly.Location místo CodeBase.
Algoritmus
Následující algoritmus popisuje, jak modul runtime načte spravované sestavení.
Určete
activeAssemblyLoadContext.- U statického odkazu na sestavení je instancí, která načetla odkazující sestavení,
activeAssemblyLoadContext. - Upřednostňovaná rozhraní API explicitně vyjadřují
activeAssemblyLoadContext. - Další API odvodí
activeAssemblyLoadContext. Pro tato rozhraní API se AssemblyLoadContext.CurrentContextualReflectionContext vlastnost používá. Pokud jenulljeho 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 instancí, která načetla odkazující sestavení,
Pro metody
Load-by-namenačteactiveAssemblyLoadContext sestavení v následujícím pořadí priority:- Zkontrolujte jeho
cache-by-name. - Volejte funkci AssemblyLoadContext.Load.
- Zkontrolujte mezipaměť instance a spusťte logiku výchozího sondování AssemblyLoadContext.Defaultspravovaného sestavení. Pokud je sestavení nově načteno, přidá se odkaz na instance AssemblyLoadContext.Default
cache-by-name. - Vyvolání události AssemblyLoadContext.Resolving pro aktivní AssemblyLoadContext.
- Vyvolejte událost AppDomain.AssemblyResolve
- Zkontrolujte jeho
U ostatních typů zatížení načte sestavení
activeAssemblyLoadContext v pořadí následujících priorit:- Zkontrolujte jeho
cache-by-name. - Pokud je
activeAssemblyLoadContextAssemblyLoadContext.Default, spusťte výchozí logiku sondování pro spravovaná sestavení. - Načtení ze zadané cesty nebo nezpracovaného objektu sestavení. Pokud je sestavení nově načteno, odkaz se přidá do instance
activeAssemblyLoadContextcache-by-name.
- Zkontrolujte jeho
V obou případech, pokud je sestavení nově načteno, je událost AppDomain.AssemblyLoad vyvolána.