AssemblyLoadContext Klasa

Definicja

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

Użycie w środowisku uruchomieniowym

Środowisko uruchomieniowe implementuje dwa konteksty ładowania zestawów:

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:

  1. 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.
  2. 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ść thisAssemblyLoadContext.

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.

Dotyczy

Zobacz też