AssemblyLoadContext Třída

Definice

Představuje koncept modulu runtime oboru načítání sestavení.

public ref class AssemblyLoadContext
public ref class AssemblyLoadContext abstract
public class AssemblyLoadContext
public abstract class AssemblyLoadContext
type AssemblyLoadContext = class
Public Class AssemblyLoadContext
Public MustInherit Class AssemblyLoadContext
Dědičnost
AssemblyLoadContext

Poznámky

AssemblyLoadContext představuje kontext zatížení. Načítací kontext vytvoří obor pro načítání, řešení a potenciální uvolnění sady sestavení.

AssemblyLoadContext existuje především za účelem zajištění izolace načítání sestavení. Umožňuje načtení více verzí stejného sestavení v rámci jednoho procesu. Nahrazuje mechanismy izolace poskytované více AppDomain instancemi v rozhraní .NET Framework.

Note

Využití v běhovém prostředí

Runtime implementuje dva kontexty načítání sestavení.

Využití aplikace

Aplikace může vytvořit svůj vlastní AssemblyLoadContext k vytvoření vlastního řešení pro pokročilé scénáře. Přizpůsobení se zaměřuje na definování mechanismů řešení závislostí.

AssemblyLoadContext poskytuje dva body rozšíření pro implementaci vyřešení spravovaného sestavení.

  1. Metoda AssemblyLoadContext.Load(AssemblyName) poskytuje AssemblyLoadContext první příležitost k vyřešení, načtení a vrácení sestavy. Pokud metoda AssemblyLoadContext.Load(AssemblyName) vrátí null, zavaděč se pokusí načíst sestavení do AssemblyLoadContext.Default.
  2. Pokud AssemblyLoadContext.Default nedokáže sestavení vyřešit, původní AssemblyLoadContext získá druhou šanci na úspěšné vyřešení. Modul runtime vyvolá Resolving událost.

Navíc virtuální metoda AssemblyLoadContext.LoadUnmanagedDll(String) umožňuje přizpůsobení výchozího nespravovaného nastavení sestavení. Výchozí implementace vrátí null, což způsobí, že hledání za běhu použije výchozí zásady vyhledávání. Výchozí zásada vyhledávání je dostatečná pro většinu scénářů.

Technické výzvy

  • V jednom procesu není možné načíst více verzí modulu runtime.

    Caution

    Načtení více kopií nebo různých verzí sestavení frameworku může vést k neočekávanému a k obtížnému diagnostikování chování.

    Tip

    K vyřešení problému izolace použijte procesní hranice pomocí vzdálené komunikace nebo meziprocesové komunikace.

  • Načasování načítání sestavení může ztížit testování a ladění. Sestavení se obvykle načítají bez okamžitého vyřešení jejich závislostí. Závislosti se načtou podle potřeby:

    • Pokud se kód zavětvuje do závislého sestavení.
    • Když kód načte prostředky.
    • Když kód explicitně načte sestavení.
  • Implementace AssemblyLoadContext.Load(AssemblyName) může přidat nové závislosti, které mohou být potřeba izolovat, aby mohly existovat různé verze. Nejpřirozenější implementace by tyto závislosti umístila do výchozího kontextu. Opatrný návrh může izolovat nové závislosti.

  • Stejné sestavení se načte vícekrát do různých kontextů.

    • To může způsobit matoucí chybové zprávy, například "Nelze přetypovat objekt typu Sample.Plugin na typ Sample.Plugin".
    • Přenášení přes hranice izolace není triviální. Typickým řešením je použít v sestavení definované rozhraní, které je načteno pouze do výchozího kontextu načítání.

Konstruktory

Name Description
AssemblyLoadContext()

Inicializuje novou instanci AssemblyLoadContext třídy.

AssemblyLoadContext(Boolean)

Inicializuje novou instanci AssemblyLoadContext třídy s hodnotou, která označuje, zda je povoleno uvolňování.

AssemblyLoadContext(String, Boolean)

Inicializuje novou instanci AssemblyLoadContext třídy s názvem a hodnotou, která označuje, zda je povoleno uvolňování.

Vlastnosti

Name Description
All

Vrátí kolekci všech AssemblyLoadContext instancí.

Assemblies

Vrátí kolekci Assembly instancí načtených v objektu AssemblyLoadContext.

CurrentContextualReflectionContext

AssemblyLoadContext Získá nastaveno posledním voláním EnterContextualReflection().

Default

Získá výchozí AssemblyLoadContext. Výchozí kontext obsahuje hlavní sestavení aplikace a jeho statické závislosti.

IsCollectible

Získá hodnotu, která označuje, zda je tato AssemblyLoadContext možnost shromažďovatelná.

Name

Získejte název AssemblyLoadContextsouboru .

Metody

Name Description
EnterContextualReflection()

Nastaví CurrentContextualReflectionContext na thisAssemblyLoadContext.

EnterContextualReflection(Assembly)

Nastaví CurrentContextualReflectionContext sestavení AssemblyLoadContext , které sestavení načetlo.

Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

(Zděděno od Object)
Finalize()

Umožňuje objektu, aby se pokusil uvolnit prostředky a provést další operace čištění před uvolněním paměti.

GetAssemblyName(String)

AssemblyName Získá cestu sestavení.

GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetLoadContext(Assembly)

AssemblyLoadContext Získá obsahující zadaný Assembly.

GetType()

Získá Type aktuální instance.

(Zděděno od Object)
Load(AssemblyName)

Při přepsání v odvozené třídě umožňuje sestavení přeložit na základě jeho AssemblyName.

LoadFromAssemblyName(AssemblyName)

Řeší a načte sestavení vzhledem k jeho AssemblyName.

LoadFromAssemblyPath(String)

Načte obsah souboru sestavení na zadanou cestu.

LoadFromNativeImagePath(String, String)

Načte obsah nativní bitové kopie spravovaného souboru sestavení na zadanou cestu.

LoadFromStream(Stream, Stream)

Načte sestavení s běžným formátem souboru objektu (COFF) obsahující spravované sestavení, volitelně včetně symbolů sestavení.

LoadFromStream(Stream)

Načte sestavení s běžným formátem souboru objektu (COFF) obsahujícím spravované sestavení.

LoadUnmanagedDll(String)

Umožňuje odvozené třídě načíst nespravovanou knihovnu podle názvu.

LoadUnmanagedDllFromPath(String)

Načte nespravovanou knihovnu ze zadané cesty.

MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
SetProfileOptimizationRoot(String)

Nastaví kořenovou cestu, kde jsou uloženy profily optimalizace pro tento kontext načítání.

StartProfileOptimization(String)

Spustí optimalizaci profilu pro zadaný profil.

ToString()

Vrátí řetězcovou reprezentaci tohoto kontextu načtení.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)
Unload()

Zahájí uvolnění tohoto AssemblyLoadContextsouboru .

Událost

Name Description
Resolving

Nastane, když řešení sestavení selže při pokusu o načtení do tohoto kontextu načtení sestavení.

ResolvingUnmanagedDll

Nastane v případě selhání překladu nativní knihovny.

Unloading

Nastane, když AssemblyLoadContext je uvolněna.

Platí pro

Viz také