System.Runtime.Loader.AssemblyLoadContext osztály
Ez a cikk kiegészítő megjegyzéseket tartalmaz az API referenciadokumentációjához.
Ez AssemblyLoadContext egy terhelési környezetet jelöl. A terhelési környezet elméletileg hatókört hoz létre a szerelvények betöltéséhez, feloldásához és esetleges kiürítéséhez.
Ez AssemblyLoadContext elsősorban a szerelvénybetöltés 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-keretrendszer több AppDomain példánya által biztosított elkülönítési mechanizmusokat váltja fel.
Megjegyzés
- 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) .
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ű elkülönítési sémával rendelkezik, amely minden szerelvényt saját AssemblyLoadContext maga tölt be függőségfeloldás nélkül.
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:
- Ez AssemblyLoadContext.Load(AssemblyName) a módszer biztosítja az első esélyt a AssemblyLoadContext szerelvény feloldására, betöltésére és visszaküldésére. Ha a AssemblyLoadContext.Load(AssemblyName) metódus visszatér
null
, a rakodó megpróbálja betölteni a szerelvényt 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 módszer lehetővé teszi az alapértelmezett nem felügyelt szerelvényfeloldás testreszabását. Az alapértelmezett implementáció visszaadja null
a 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.
Nem tölthető be a futtatókörnyezet több verziója egyetlen folyamatba.
Figyelemfelhívás
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.
Tipp.
Az elkülönítési probléma megoldásához használjon folyamathatárokat újra- vagy folyamatközi kommunikációval.
Az szerelvénybetöltés időzítése megnehezítheti a tesztelést és a hibakeresést. A szerelvények általában a függőségeik azonnali feloldása nélkül töltődnek be. A függőségek szükség szerint töltődnek be:
- Amikor a kód egy függő szerelvénybe ágaz.
- Amikor a kód betölti az erőforrásokat.
- Amikor a kód kifejezetten betölti a szerelvényeket.
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 a "Sample.Plugin" típusú objektum nem adhatja le a "Sample.Plugin" típust.
- 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.
.NET-visszajelzés
A(z) .NET egy nyílt forráskód projekt. Visszajelzés adásához válasszon egy hivatkozást: