AssemblyLoadContext Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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
- AssemblyLoadContext neposkytuje žádné funkce zabezpečení. Veškerý kód má úplná oprávnění procesu.
- Pouze AssemblyLoadContext v .NET Core 2.0 – 2.2 je abstraktní třída. Chcete-li vytvořit konkrétní třídu v těchto verzích, implementujte metodu AssemblyLoadContext.Load(AssemblyName) .
Využití v běhovém prostředí
Runtime implementuje dva kontexty načítání sestavení.
- AssemblyLoadContext.Default představuje výchozí kontext modulu runtime, který se používá pro hlavní sestavení aplikace a jeho statické závislosti.
- Metoda Assembly.LoadFile(String) izoluje sestavení, která načítá, vytvořením instance nejzásadnější AssemblyLoadContext. Má zjednodušené schéma izolace, které načte každé sestavení ve svém vlastním AssemblyLoadContext , bez rozlišení závislostí.
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í.
- 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. - 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 |
| 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. |