Sdílet prostřednictvím


System.Runtime.Loader.AssemblyLoadContext třída

Tento článek obsahuje doplňující poznámky k referenční dokumentaci pro toto rozhraní API.

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.

Poznámka:

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.

    Upozornění

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

    Návod

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