AssemblyLoadContext Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
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
- AssemblyLoadContext nem biztosít biztonsági szolgáltatásokat. Minden kód rendelkezik a folyamat teljes engedélyével.
- Csak a .NET Core 2.0- 2.2-ben AssemblyLoadContext egy absztrakt osztály. Ha konkrét osztályt szeretne létrehozni ezekben a verziókban, implementálja a metódust AssemblyLoadContext.Load(AssemblyName) .
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:
-
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. - 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 |
| 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: CurrentContextualReflectionContext |
| 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. |