Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A felügyelt szerelvények különböző fázisokkal rendelkező algoritmussal vannak elhelyezve és betöltve.
A műholdas szerelvények és WinRT szerelvények kivételével minden felügyelt szerelvények ugyanazt az algoritmust használják.
Mikor töltődnek be a felügyelt összeállítások?
A felügyelt szerelvénybetöltések aktiválásának leggyakoribb mechanizmusa egy statikus szerelvényhivatkozás. Ezeket a hivatkozásokat a fordító szúrja be, amikor a kód egy másik szerelvényben meghatározott típust használ. Ezeket a szerelvényeket szükség szerint betölti (load-by-name) a futtatókörnyezet. A statikus szerelvényhivatkozások betöltésének pontos időzítése nincs meghatározva. Futásidejű verziók között változhat, és az optimalizálás, például a beágyazás befolyásolja.
A következő API-k közvetlen használata terheléseket is aktivál:
| API | Leírás |
Active
AssemblyLoadContext
|
|---|---|---|
| AssemblyLoadContext.LoadFromAssemblyName | Load-by-name |
Ez a példány. |
| AssemblyLoadContext.LoadFromAssemblyPath AssemblyLoadContext.LoadFromNativeImagePath |
Betöltés az elérési útból. | Ez a példány. |
| AssemblyLoadContext.LoadFromStream | Betöltés objektumból. | Ez a példány. |
| Assembly.LoadFile | Betöltés az elérési útból egy új AssemblyLoadContext példányban | Az új AssemblyLoadContext példány. |
| Assembly.LoadFrom | Betöltés a AssemblyLoadContext.Default példány elérési útvonalából. Ad hozzá egy AppDomain.AssemblyResolve kezelőt. A kezelő betölti az assembly függőségeit a könyvtárából. |
A AssemblyLoadContext.Default példány. |
| Assembly.Load(AssemblyName) Assembly.Load(String) Assembly.LoadWithPartialName |
Load-by-name. |
A hívótól származó következtetés. Részesítse előnyben a AssemblyLoadContext metódusokat. |
| Assembly.Load(Byte[]) Assembly.Load(Byte[], Byte[]) |
Új AssemblyLoadContext példányban történő betöltés objektumból. | Az új AssemblyLoadContext példány. |
| Type.GetType(String) Type.GetType(String, Boolean) Type.GetType(String, Boolean, Boolean) |
Load-by-name. |
A hívótól származó következtetés. Előnyben részesítsen Type.GetType metódust, amely assemblyResolver argumentummal rendelkezik. |
| Assembly.GetType | Ha a típus name egy szerelvény minősített általános típusát írja le, aktiváljon egy Load-by-name. |
A hívótól származó következtetés. Előnyben részesítendő Type.GetType , ha szerelvény minősített típusneveket használ. |
| Activator.CreateInstance(String, String) Activator.CreateInstance(String, String, Object[]) Activator.CreateInstance(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[]) |
Load-by-name. |
A hívótól származó következtetés. Előnyben részesítse Activator.CreateInstance az argumentumot használó metódusokat Type . |
Fontos
A .NET-keretrendszertől eltérően a assemblyFile paraméter Assembly.LoadFrom a .NET fájlútvonalaként, nem URI-ként lesz kezelve. A .NET-keretrendszerben átadhat egy fájl URI-t (például file:///C:/path/to/assembly.dll), például egy Assembly.CodeBase-ből létrehozott fájl esetében, és az assembly sikeresen betöltődik. A .NET-ben az assemblyFile értéke átadódik a Path.GetFullPath részére, amely nem kezeli megfelelően az URI-kat, ezért a betöltés meghiúsul. Ha már rendelkezik egy fájl URI-sztringgel, először hozzon létre egy példányt Uri, majd annak tulajdonságának segítségével kérje le a fájl elérési útját, mielőtt meghívná LocalPath. Ha egy már betöltött szerelvény fájlútvonalát szeretné lekérni, használja a Assembly.Location ahelyett, hogy a CodeBase-t használná.
Algoritmus
Az alábbi algoritmus bemutatja, hogy a futtatás ideje alatt hogyan tölt be egy kezelt assembly-t.
Határozza meg a
activeAssemblyLoadContext.- Statikus szerelvényhivatkozás esetén az
activeAssemblyLoadContext a példány, amely betöltötte a hivatkozó szerelvényt. - Az előnyben részesített API-k teszik explicitvé.
activeAssemblyLoadContext - Más API-k levezetnek a
activeAssemblyLoadContext. Ezekhez az API-khoz a AssemblyLoadContext.CurrentContextualReflectionContext tulajdonságot használja a rendszer. Ha az értékenull, akkor a kikövetkeztetett AssemblyLoadContext példányt használják. - Tekintse meg az alábbi táblázatot a Mikor töltődnek be a felügyelt szerelvények? szakaszban.
- Statikus szerelvényhivatkozás esetén az
A
Load-by-namemetódusok esetében aactiveAssemblyLoadContext az összetevőt a következő prioritási sorrendben tölti be:- Ellenőrizze a(z)
cache-by-name.-t. - Hívja meg a függvényt AssemblyLoadContext.Load .
- Ellenőrizze a AssemblyLoadContext.Default példány gyorsítótárát, és futtassa a felügyelt szerelvény alapértelmezett próbalogikát . Ha egy szerelvény újonnan van betöltve, a rendszer hozzáad egy hivatkozást a AssemblyLoadContext.Default példányhoz
cache-by-name. - Emelje az aktív AssemblyLoadContext AssemblyLoadContext.Resolving eseményét.
- Indítson el egy eseményt AppDomain.AssemblyResolve .
- Ellenőrizze a(z)
Más típusú terhelések esetén a
activeAssemblyLoadContext szerelvény a következő prioritási sorrendben töltődik be:- Ellenőrizze a(z)
cache-by-name.-t. - Ha a
activeAssemblyLoadContextAssemblyLoadContext.Default, futtassa a kezelt szerelvényekhez tartozó alapértelmezett próbakeresési logikát. - Betöltés a megadott útvonalról vagy nyers assembly objektumból. Ha egy szerelvény újonnan betöltődik, a rendszer hozzáad egy hivatkozást a
activeAssemblyLoadContext példányánakcache-by-name.
- Ellenőrizze a(z)
Bármelyik esetben, ha egy összeállítás újonnan van betöltve, akkor az AppDomain.AssemblyLoad esemény emelkedik.