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.

Představuje AssemblyLoadContext kontext načtení. Kontext načtení vytvoří obor pro načítání, překlad a potenciální uvolnění sady sestavení.

Existuje AssemblyLoadContext především k 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 modulu runtime

Modul runtime implementuje dva kontexty načtení sestavení:

Využití aplikace

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

Poskytuje AssemblyLoadContext dva body rozšíření pro implementaci řešení spravovaného sestavení:

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

Virtuální metoda navíc AssemblyLoadContext.LoadUnmanagedDll(String) umožňuje přizpůsobení výchozího nespravovaného překladu 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í architektury může vést k neočekávanému a obtížnému chování.

    Tip

    K vyřešení tohoto problému izolace použijte hranice procesů se vzdálené komunikace nebo komunikace mezi procesy.

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

    • Když kód rozdělí 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".
    • Zařazování přes hranice izolace není triviální. Typickým řešením je použít rozhraní definované v sestavení, které je načteno pouze do výchozího kontextu načítání.