Sdílet prostřednictvím


Algoritmus načítání spravovaných sestavení

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í:

API (rozhraní pro programování aplikací) Popis Active AssemblyLoadContext
AssemblyLoadContext.LoadFromAssemblyName Load-by-name Tato instance.
AssemblyLoadContext.LoadFromAssemblyPath
AssemblyLoadContext.LoadFromNativeImagePath
Načtení z cesty Tato instance.
AssemblyLoadContext.LoadFromStream Načtení z objektu Tato instance.
Assembly.LoadFile Načtení z cesty v nové AssemblyLoadContext instanci Nová AssemblyLoadContext instance.
Assembly.LoadFrom Načtěte ze cesty v instanci AssemblyLoadContext.Default.
Přidá obslužnou rutinu AppDomain.AssemblyResolve . Obslužná rutina načte závislosti sestavení z jeho adresáře.
Instance AssemblyLoadContext.Default.
Assembly.Load(AssemblyName)
Assembly.Load(String)
Assembly.LoadWithPartialName
Load-by-name. Odvozeno od volajícího.
Upřednostňuji AssemblyLoadContext metody.
Assembly.Load(Byte[])
Assembly.Load(Byte[], Byte[])
Načtení z objektu v nové AssemblyLoadContext instanci Nová AssemblyLoadContext instance.
Type.GetType(String)
Type.GetType(String, Boolean)
Type.GetType(String, Boolean, Boolean)
Load-by-name. Odvozeno od volajícího.
Upřednostňujte Type.GetType metody s argumentem assemblyResolver .
Assembly.GetType Pokud typ name popisuje obecný typ kvalifikovaný sestavením, vyvolejte Load-by-name. Odvozeno od volajícího.
Preferujte Type.GetType při používání názvů typů kvalifikovaných sestavení.
Activator.CreateInstance(String, String)
Activator.CreateInstance(String, String, Object[])
Activator.CreateInstance(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])
Load-by-name. Odvozeno od volajícího.
Upřednostňte Activator.CreateInstance metody, které mají jako argument Type.

Algoritmus

Následující algoritmus popisuje, jak modul runtime načte spravované sestavení.

  1. Určete activeAssemblyLoadContext.

  2. Pro metody Load-by-name načte activeAssemblyLoadContext sestavení v následujícím pořadí priority:

  3. U ostatních typů zatížení načte sestavení activeAssemblyLoadContext v pořadí následujících priorit:

    • Zkontrolujte jeho cache-by-name.
    • 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.
  4. V obou případech, pokud je sestavení nově načteno, je událost AppDomain.AssemblyLoad vyvolána.