AssemblyLoadContext Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Reprezentuje koncepcję środowiska uruchomieniowego zakresu ładowania zestawu.
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
- Dziedziczenie
-
AssemblyLoadContext
Uwagi
Obiekt AssemblyLoadContext reprezentuje kontekst ładowania. Koncepcyjnie kontekst ładowania tworzy zakres dla ładowania, rozpoznawania i potencjalnego zwalniania zestawu bibliotek.
AssemblyLoadContext istnieje przede wszystkim, aby zapewnić izolację ładowania zestawu. Umożliwia ładowanie wielu wersji tego samego zestawu w ramach jednego procesu. Zastępuje on mechanizmy izolacji udostępniane przez wiele AppDomain wystąpień w programie .NET Framework.
Note
- AssemblyLoadContext nie udostępnia żadnych funkcji zabezpieczeń. Cały kod ma pełne uprawnienia do procesu.
- Tylko w programie .NET Core 2.0 – 2.2 AssemblyLoadContext jest klasą abstrakcyjną. Aby utworzyć konkretną klasę w tych wersjach, zaimplementuj metodę AssemblyLoadContext.Load(AssemblyName) .
Użycie w środowisku uruchomieniowym
Środowisko uruchomieniowe implementuje dwa konteksty ładowania zestawów:
- AssemblyLoadContext.Default reprezentuje domyślny kontekst środowiska uruchomieniowego, który jest używany dla głównego zestawu aplikacji i jego statycznych zależności.
- Metoda Assembly.LoadFile(String) izoluje zestawy, które ładuje, tworząc wystąpienie najbardziej podstawowego AssemblyLoadContext. Ma uproszczony schemat izolacji, który ładuje każdy zestaw samodzielnie AssemblyLoadContext bez rozwiązywania zależności.
Użycie aplikacji
Aplikacja może utworzyć własne AssemblyLoadContext , aby utworzyć niestandardowe rozwiązanie dla zaawansowanych scenariuszy. Dostosowanie koncentruje się na definiowaniu mechanizmów rozwiązywania zależności.
Element AssemblyLoadContext udostępnia dwa punkty rozszerzenia do implementowania zarządzanego rozpoznawania zestawów:
- Metoda AssemblyLoadContext.Load(AssemblyName) zapewnia pierwszą szansę na AssemblyLoadContext rozwiązanie, załadowanie i zwrócenie zestawu. Jeśli metoda AssemblyLoadContext.Load(AssemblyName) zwróci wartość
null, moduł ładujący spróbuje załadować zestaw do elementu AssemblyLoadContext.Default. - Jeśli AssemblyLoadContext.Default nie zdoła zainicjalizować zestawu, oryginalny AssemblyLoadContext otrzymuje drugą szansę na zainicjalizowanie zestawu. Środowisko uruchomieniowe Resolving zgłasza zdarzenie.
Ponadto metoda wirtualna AssemblyLoadContext.LoadUnmanagedDll(String) umożliwia dostosowanie domyślnej niezarządzanej rozdzielczości zestawu. Domyślna implementacja zwraca null, co powoduje, że wyszukiwanie podczas wykonywania używa domyślnych zasad wyszukiwania. Domyślne zasady wyszukiwania są wystarczające dla większości scenariuszy.
Wyzwania techniczne
Nie można załadować wielu wersji środowiska uruchomieniowego w jednym procesie.
Caution
Ładowanie wielu kopii lub różnych wersji zestawów frameworku może prowadzić do nieoczekiwanego i trudnego do zdiagnozowania zachowania.
Wskazówka
Użyj granic procesów z komunikacją zdalną lub międzyprocesową, aby rozwiązać ten problem z izolacją.
Czas ładowania zestawu może utrudnić testowanie i debugowanie. Zestawy są zwykle ładowane bez natychmiastowego rozwiązania ich zależności. Zależności są ładowane zgodnie z potrzebami:
- Gdy kod jest odgałęzieny do zestawu zależnego.
- Gdy kod ładuje zasoby.
- Gdy kod jawnie ładuje zestawy.
Implementacja AssemblyLoadContext.Load(AssemblyName) programu może dodawać nowe zależności, które mogą wymagać odizolowania, aby umożliwić istnienie różnych wersji. Najbardziej naturalna implementacja spowoduje umieszczenie tych zależności w kontekście domyślnym. Staranne projektowanie może odizolować nowe zależności.
Ten sam zestaw jest ładowany wiele razy do różnych kontekstów.
- Może to prowadzić do mylących komunikatów o błędach, na przykład "Nie można rzutować obiektu typu 'Sample.Plugin' na typ 'Sample.Plugin'".
- Przeprowadzanie marshalingu (czyli przekazywania danych lub obiektów) przez granice izolacji nie jest trywialne. Typowym rozwiązaniem jest użycie interfejsu zdefiniowanego w zestawie, który jest ładowany tylko do domyślnego kontekstu ładowania.
Konstruktory
| Nazwa | Opis |
|---|---|
| AssemblyLoadContext() |
Inicjuje nowe wystąpienie klasy AssemblyLoadContext. |
| AssemblyLoadContext(Boolean) |
Inicjuje nowe wystąpienie AssemblyLoadContext klasy z wartością wskazującą, czy zwalnianie jest włączone. |
| AssemblyLoadContext(String, Boolean) |
Inicjuje nowe wystąpienie AssemblyLoadContext klasy o nazwie i wartości wskazującej, czy zwalnianie jest włączone. |
Właściwości
| Nazwa | Opis |
|---|---|
| All |
Zwraca kolekcję wszystkich AssemblyLoadContext wystąpień. |
| Assemblies |
Zwraca kolekcję Assembly wystąpień załadowanych w obiekcie AssemblyLoadContext. |
| CurrentContextualReflectionContext |
AssemblyLoadContext Pobiera zestaw przez najnowsze wywołanie metody EnterContextualReflection(). |
| Default |
Pobiera wartość domyślną AssemblyLoadContext. Kontekst domyślny zawiera główny zestaw aplikacji i jego zależności statyczne. |
| IsCollectible |
Pobiera wartość wskazującą, czy jest to AssemblyLoadContext możliwe do zebrania. |
| Name |
Pobierz nazwę elementu AssemblyLoadContext. |
Metody
| Nazwa | Opis |
|---|---|
| EnterContextualReflection() |
Ustawia CurrentContextualReflectionContext wartość |
| EnterContextualReflection(Assembly) |
Ustawia CurrentContextualReflectionContext zestaw, który AssemblyLoadContext załadował zestaw. |
| Equals(Object) |
Określa, czy określony obiekt jest równy bieżącemu obiektowi. (Odziedziczone po Object) |
| Finalize() |
Umożliwia obiektowi próbę zwolnienia zasobów i wykonanie innych operacji oczyszczania przed odzyskaniem przez odzyskiwanie pamięci. |
| GetAssemblyName(String) |
Pobiera element AssemblyName dla ścieżki zestawu. |
| GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
| GetLoadContext(Assembly) |
Pobiera element AssemblyLoadContext zawierający określony Assemblyelement . |
| GetType() |
Pobiera Type bieżącego wystąpienia. (Odziedziczone po Object) |
| Load(AssemblyName) |
Po zastąpieniu w klasie pochodnej umożliwia rozpoznawanie zestawu na podstawie jego AssemblyNameklasy . |
| LoadFromAssemblyName(AssemblyName) |
Usuwa i ładuje zestaw, biorąc pod uwagę jego AssemblyNamewartość . |
| LoadFromAssemblyPath(String) |
Ładuje zawartość pliku zestawu na określonej ścieżce. |
| LoadFromNativeImagePath(String, String) |
Ładuje zawartość obrazu natywnego pliku zestawu zarządzanego na określonej ścieżce. |
| LoadFromStream(Stream, Stream) |
Ładuje zestaw ze wspólnym obrazem opartym na pliku obiektów (COFF) zawierającym zarządzany zestaw, opcjonalnie w tym symbole zestawu. |
| LoadFromStream(Stream) |
Ładuje zestaw ze wspólnym obrazem opartym na pliku obiektów (COFF) zawierającym zarządzany zestaw. |
| LoadUnmanagedDll(String) |
Umożliwia klasom pochodnym ładowanie niezarządzanej biblioteki według nazwy. |
| LoadUnmanagedDllFromPath(String) |
Ładuje niezarządzaną bibliotekę z określonej ścieżki. |
| MemberwiseClone() |
Tworzy płytkią kopię bieżącego Object. (Odziedziczone po Object) |
| SetProfileOptimizationRoot(String) |
Ustawia ścieżkę główną, w której są przechowywane profile optymalizacji dla tego kontekstu ładowania. |
| StartProfileOptimization(String) |
Uruchamia optymalizację profilu dla określonego profilu. |
| ToString() |
Zwraca reprezentację ciągu tego kontekstu ładowania. |
| ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
| Unload() |
Inicjuje zwolnienie tego elementu AssemblyLoadContext. |
Zdarzenia
| Nazwa | Opis |
|---|---|
| Resolving |
Występuje, gdy rozwiązanie zestawu kończy się niepowodzeniem podczas próby załadowania do tego kontekstu ładowania zestawu. |
| ResolvingUnmanagedDll |
Występuje, gdy rozwiązanie biblioteki natywnej kończy się niepowodzeniem. |
| Unloading |
Występuje po AssemblyLoadContext rozładowaniu. |