Alapértelmezett szondázás

A AssemblyLoadContext.Default példány felelős a szerelvény függőségeinek meghatározásáért. Ez a cikk a AssemblyLoadContext.Default példány próbai logikáját ismerteti.

Kiszolgáló által konfigurált vizsgálati tulajdonságok

A futtatókörnyezet indításakor a futtatókörnyezet gazdagép nevesített szondázási tulajdonságokat biztosít, amelyek szonda útvonalakat konfigurálnak AssemblyLoadContext.Default.

Az egyes próbatulajdonságok megadása nem kötelező. Ha van ilyen, minden tulajdonság egy sztringérték, amely az abszolút elérési utak elválasztott listáját tartalmazza. Az elválasztó Windows rendszeren a ";" és minden egyéb platformon a ":".

Tulajdonság neve Description
TRUSTED_PLATFORM_ASSEMBLIES A platform- és alkalmazás-szerelvényfájl elérési útjainak listája.
PLATFORM_RESOURCE_ROOTS A műholdas erőforrás-szerelvények kereséséhez szükséges könyvtárelérési útvonalak listája.
NATIVE_DLL_SEARCH_DIRECTORIES A nem felügyelt (natív) kódtárak kereséséhez használt könyvtárelérési útvonalak listája.
APP_PATHS A felügyelt szerelvények kereséséhez használt címtárelérési utak listája.

Hogyan vannak feltöltve a tulajdonságok?

A tulajdonságok feltöltésének két fő forgatókönyve van attól függően, hogy a <myapp>.deps.json fájl létezik-e.

  • Ha a *.deps.json fájl jelen van, a rendszer elemzi a próbatulajdonságok feltöltését.
  • Ha a *.deps.json fájl nincs jelen, az alkalmazás könyvtára feltételezi, hogy az összes függőséget tartalmazza. A könyvtár tartalmát használják a vizsgálati tulajdonságok feltöltésére.

Emellett a *.deps.json fájlok is hasonlóan vannak elemezve a hivatkozott keretrendszerekhez.

A környezeti változó DOTNET_ADDITIONAL_DEPS további függőségek hozzáadására is használható. dotnet.exe egy opcionális --additional-deps paramétert is tartalmaz, amely ezt az értéket az alkalmazás indításakor állítja be.

Megjegyzés:

A DOTNET_ADDITIONAL_DEPS környezeti változó és a --additional-deps parancssori beállítás csak a keretrendszerfüggő alkalmazásokra vonatkozik. Ezeket a beállításokat a rendszer figyelmen kívül hagyja az önálló alkalmazások esetében. További információkért tekintse meg a keretrendszerfüggő és önálló telepítések oldalt.

A APP_PATHS tulajdonság alapértelmezés szerint nem töltődik fel, és a legtöbb alkalmazás esetében nincs megadva.

Az alkalmazás által használt összes *.deps.json fájl listája elérhető a következőn keresztül System.AppContext.GetData("APP_CONTEXT_DEPS_FILES"): .

Hogyan látom a felügyelt kódból származó próbatulajdonságokat?

Minden tulajdonság elérhető, ha meghívja a AppContext.GetData(String) függvényt a fenti táblázat tulajdonságnevével.

Hogyan lehet hibakeresést végezni a próbatulajdonságok szerkezetében?

A .NET Core futtatókörnyezet-gazdagép hasznos nyomkövetési üzeneteket ad ki, ha bizonyos környezeti változók engedélyezve vannak:

Környezeti változó Description
DOTNET_HOST_TRACE=1 Engedélyezi a nyomkövetést.
DOTNET_HOST_TRACEFILE=<path> Az alapértelmezett stderrhelyett egy fájl elérési útjára mutat.
DOTNET_HOST_TRACE_VERBOSITY A részletességet 1-től 4-ig (legmagasabb) állítja be.

További információ: DOTNET_HOST_TRACE környezeti változók.

Felügyelt összeállítás alapértelmezett keresés

Felügyelt szerelvény megkeresésekor a AssemblyLoadContext.Default a következő sorrendben keres:

  • A fájlok, amelyek a fájlkiterjesztések eltávolítása után megfelelnek a AssemblyName.Name és TRUSTED_PLATFORM_ASSEMBLIES mintának.
  • Szerelvényfájlok gyakori APP_PATHS fájlkiterjesztésekkel.

Az alapértelmezett AssemblyLoadContext betöltésekor a TRUSTED_PLATFORM_ASSEMBLIES vagy APP_PATHS található szerelvények elsőbbséget élveznek a megadott útvonallal vagy nyers szerelvényobjektummal szemben. Ha például meghívja a vagy az alapértelmezett c2< / >-n, és létezik egy azonos nevű szerelvény a vagy helyen, a futtatókörnyezet a megadott stream vagy elérési út helyett ezekről a helyekről tölti be a szerelvényt.

Műholdas (erőforrás-) szerelvény-próba

Ha egy adott kultúrához tartozó műholdas egységet szeretne keresni, állítson össze egy fájlútvonalak halmazát.

Az egyes PLATFORM_RESOURCE_ROOTS és APP_PATHS elérési utakhoz fűzze hozzá a CultureInfo.Name sztringet, a könyvtárelválasztót, a AssemblyName.Name sztringet, és a kiterjesztést '.dll'.

Ha létezik egyező fájl, próbálja meg betölteni és visszaadni.

Felügyelet nélküli (natív) könyvtár próba

A futtatókörnyezet nem menedzselt kódtári feltérképezési algoritmusa minden platformon ugyanaz. Mivel azonban a nem felügyelt kódtár tényleges terhelését a mögöttes platform végzi, a megfigyelt viselkedés kissé eltérő lehet.

  1. Ellenőrizze, hogy a megadott kódtárnév abszolút vagy relatív elérési utat jelöl-e.

  2. Ha a név abszolút elérési utat jelöl, használja a nevet közvetlenül az összes további művelethez. Ellenkező esetben használja a nevet, és hozzon létre a platform által meghatározott kombinációkat. A kombinációk platformspecifikus előtagokból (például ) libés/vagy utótagokból (például , .dll.dylibés .so) állnak. Ez nem egy teljes lista, és nem jelenti az egyes platformokon végzett pontos erőfeszítéseket. Ez csak egy példa arra, amit figyelembe kell venni. További információ: natív kódtár betöltése.

  3. A név és ha az elérési út relatív, az egyes kombinációk a következő lépésekben lesznek használva. Az első sikeres betöltési kísérlet azonnal visszaadja a fogantyút a betöltött könyvtárhoz.

    • Fűzze hozzá a NATIVE_DLL_SEARCH_DIRECTORIES tulajdonságban megadott összes elérési úthoz, és próbálja meg betölteni.

    • Ha a DefaultDllImportSearchPathsAttribute nincs definiálva a hívó összeszerelésen vagy a p/invoke-n, vagy ha definiálva van és tartalmazza a DllImportSearchPath.AssemblyDirectory-et, akkor fűzze hozzá a nevet vagy a kombinációt a hívó összeszerelés könyvtárához, és próbálja meg betölteni azt.

    • Használja közvetlenül a könyvtár betöltéséhez.

  4. Azt jelzi, hogy a könyvtár betöltése nem sikerült.