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

API 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 z cesty v AssemblyLoadContext.Default instanci.
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 sestavení kvalifikovaný obecný typ, trigger a Load-by-name. Odvozeno od volajícího.
Preferuje Type.GetType se při použití názvů kvalifikovaných typů 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é Type berou argument.

Algoritmus

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

  1. Určete active AssemblyLoadContext.

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

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