AssemblyLoadContext Osztály

Definíció

A futtatókörnyezet szerelvénybetöltési hatókörének fogalma.

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
Öröklődés
AssemblyLoadContext

Megjegyzések

Ez AssemblyLoadContext egy terhelési környezetet jelöl. Fogalmilag a terhelési környezet hatókört hoz létre a szerelvények betöltésére, feloldására és esetleges kiürítésére.

Ez a AssemblyLoadContext elsősorban az összeállítás betöltésének elkülönítésére szolgál. Lehetővé teszi ugyanazon szerelvény több verziójának betöltését egyetlen folyamaton belül. A .NET-keretrendszerben több AppDomain példány által biztosított elkülönítési mechanizmusokat váltja fel.

Note

Használat a futási környezetben

A futtatókörnyezet két szerelvénybetöltési környezetet valósít meg:

  • AssemblyLoadContext.Default A futtatókörnyezet alapértelmezett környezetét jelöli, amelyet az alkalmazás főszerelvényéhez és statikus függőségeihez használnak.
  • A Assembly.LoadFile(String) módszer a legalapvetőbb AssemblyLoadContextpéldányosítással elkülöníti a betölthető szerelvényeket . Egy egyszerű izolációs sémával rendelkezik, amely minden modul számára saját AssemblyLoadContext-t tölt be, függőségek feloldása nélkül.

Alkalmazáshasználat

Az alkalmazások létrehozhatnak saját AssemblyLoadContext megoldásokat a speciális helyzetekhez. A testreszabás a függőségfeloldási mechanizmusok meghatározására összpontosít.

A AssemblyLoadContext felügyelt szerelvényfeloldás implementálásához két bővítménypontot biztosít:

  1. AssemblyLoadContext.Load(AssemblyName) módszer adja az első lehetőséget a AssemblyLoadContext szerelvény megoldására, betöltésére és visszaadására. Ha a AssemblyLoadContext.Load(AssemblyName) metódus visszatér null, a betöltő megpróbálja betölteni az összeállítást a AssemblyLoadContext.Default.
  2. Ha a AssemblyLoadContext.Default szerelvény nem oldható fel, az eredeti AssemblyLoadContext kap egy második esélyt a szerelvény feloldására. A futtatókörnyezet aktiválja az eseményt Resolving .

Emellett a AssemblyLoadContext.LoadUnmanagedDll(String) virtuális metódus lehetővé teszi az alapértelmezett nem felügyelt összeállítási feloldás testreszabását. Az alapértelmezett implementáció visszaadja nulla hibát, ami miatt a futtatókörnyezeti keresés az alapértelmezett keresési szabályzatot használja. Az alapértelmezett keresési szabályzat elegendő a legtöbb forgatókönyvhöz.

Technikai kihívások

  • Nem tölthető be a futtatókörnyezet több verziója egyetlen folyamatba.

    Caution

    A több példány vagy a keretrendszer-szerelvények különböző verzióinak betöltése váratlan és nehezen diagnosztizálható viselkedéshez vezethet.

    Tip

    Az elkülönítési probléma megoldásához használjon folyamathatárokat távoli vagy folyamatközi kommunikációval.

  • Az szerelvénybetöltés időzítése megnehezítheti a tesztelést és a hibakeresést. Az összeállítások általában betöltődnek anélkül, hogy a függőségeik azonnal fel lennének oldva. A függőségek igény szerint töltődnek be.

    • Amikor a kód egy függő összeállításba ágazik.
    • Amikor a kód betölti az erőforrásokat.
    • Amikor a kód kifejezetten betölti az assembly-ket.
  • A megvalósítás AssemblyLoadContext.Load(AssemblyName) új függőségeket adhat hozzá, amelyeket el kell különíteni, hogy különböző verziók létezhessenek. A legtermedelemesebb implementáció ezeket a függőségeket az alapértelmezett környezetben helyezi el. A gondos tervezés elkülönítheti az új függőségeket.

  • Ugyanazt a szerelvényt többször tölti be a rendszer különböző környezetekbe.

    • Ez zavaró hibaüzenetekhez vezethet, például "Nem lehet a 'Sample.Plugin' típusú objektumot 'Sample.Plugin' típusra átönteni".
    • Az elkülönítési határok közötti marsallálás nem triviális. Egy tipikus megoldás egy olyan szerelvényben definiált felület használata, amely csak az alapértelmezett terhelési környezetbe van betöltve.

Konstruktorok

Name Description
AssemblyLoadContext()

Inicializálja a AssemblyLoadContext osztály új példányát.

AssemblyLoadContext(Boolean)

Inicializálja az AssemblyLoadContext osztály új példányát egy olyan értékkel, amely jelzi, hogy engedélyezve van-e a kiürítés.

AssemblyLoadContext(String, Boolean)

Inicializálja az AssemblyLoadContext osztály új példányát egy névvel és egy értékkel, amely jelzi, hogy engedélyezve van-e a kiürítés.

Tulajdonságok

Name Description
All

Az összes AssemblyLoadContext példány gyűjteményét adja vissza.

Assemblies

A /> függvényben betöltött példányok gyűjteményét adja vissza.

CurrentContextualReflectionContext

Lekéri a AssemblyLoadContext halmazt a legutóbbi hívással.EnterContextualReflection()

Default

Lekéri az alapértelmezett AssemblyLoadContextértéket. Az alapértelmezett környezet tartalmazza a fő alkalmazásszerelvényt és annak statikus függőségeit.

IsCollectible

Beolvas egy értéket, amely jelzi, hogy ez AssemblyLoadContext gyűjthető-e.

Name

A név lekérése AssemblyLoadContext.

Metódusok

Name Description
EnterContextualReflection()

Beállítás: CurrentContextualReflectionContextthisAssemblyLoadContext.

EnterContextualReflection(Assembly)

CurrentContextualReflectionContext A szerelvényt betöltött szerelvényre állítjaAssemblyLoadContext.

Equals(Object)

Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal.

(Öröklődés forrása Object)
Finalize()

Lehetővé teszi az objektum számára, hogy megkísérelje felszabadítani az erőforrásokat, és más tisztítási műveleteket hajt végre, mielőtt a szemétgyűjtés visszanyeri azt.

GetAssemblyName(String)

Lekéri a AssemblyName szerelvény elérési útját.

GetHashCode()

Ez az alapértelmezett kivonatoló függvény.

(Öröklődés forrása Object)
GetLoadContext(Assembly)

Lekéri a AssemblyLoadContext megadott Assemblyelemet.

GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
Load(AssemblyName)

Ha felül van bírálva egy származtatott osztályban, lehetővé teszi a szerelvény feloldását annak AssemblyNamealapján.

LoadFromAssemblyName(AssemblyName)

Feloldja és betölti a szerelvényt a sajátja AssemblyNamealapján.

LoadFromAssemblyPath(String)

Betölti egy szerelvényfájl tartalmát a megadott elérési úton.

LoadFromNativeImagePath(String, String)

Betölti egy felügyelt szerelvényfájl natív képének tartalmát a megadott útvonalon.

LoadFromStream(Stream, Stream)

Betölti a szerelvényt egy közös objektumfájlformátumú (COFF)-alapú képpel, amely egy felügyelt szerelvényt tartalmaz, opcionálisan a szerelvény szimbólumait is beleértve.

LoadFromStream(Stream)

Betölti a szerelvényt egy közös objektumfájlformátumú (COFF)-alapú képpel, amely egy felügyelt szerelvényt tartalmaz.

LoadUnmanagedDll(String)

Lehetővé teszi, hogy a származtatott osztály név szerint betöltsön egy nem felügyelt tárat.

LoadUnmanagedDllFromPath(String)

Betölt egy nem felügyelt tárat a megadott elérési útból.

MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
SetProfileOptimizationRoot(String)

Beállítja a gyökér elérési utat, ahol a terhelési környezet optimalizálási profiljai tárolódnak.

StartProfileOptimization(String)

Elindítja a profil optimalizálását a megadott profilhoz.

ToString()

Ennek a terhelési környezetnek a sztringképét adja vissza.

ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)
Unload()

Kezdeményezi ennek AssemblyLoadContexta kiürítésének a kezdeményezését.

esemény

Name Description
Resolving

Akkor fordul elő, ha egy szerelvény feloldása meghiúsul, amikor megpróbál betöltődni ebbe a szerelvénybe.

ResolvingUnmanagedDll

Akkor fordul elő, ha a natív kódtár feloldása meghiúsul.

Unloading

A kiürítéskor AssemblyLoadContext következik be.

A következőre érvényes:

Lásd még