Felbontás loading szerelvények
A .NET Framework AppDomain esemény. AssemblyResolve igénylő alkalmazásokhoz további terhelést vezérlő egységet. Feldolgozása révén ez az esemény, az alkalmazás képes betölteni egy összeállítás keretében a boot könyvtár, ami általában házkutatást, válassza ki, melyik verzió a szerelvény betölteni, hozzon létre egy dinamikus szerelvényt, és visszaküldi azt és így tovább. Ez a rész leírja, hogyan kell használni AssemblyResolve eseményeket.
A probléma megoldásához a rakodási egységek keretében a reflexiót kizárólag AppDomain esemény. ReflectionOnlyAssemblyResolve.
A regisztráció során az eseménykezelő AssemblyResolve kezelőt hívja, amikor a futási nem köti az összeállítás nevét. Például, amelyben az alábbi módszerek felhasználói kód okozhat AssemblyResolve eseményeket.
AppDomain módszer túlterhelés. Vagy túlterhelés Load szerelési eljárás. Terhelést. ahol az első argumentum egy string a megjelenítési nevét betöltött szerelvény (azaz a húr vissza Assembly.FullName tulajdonság).
AppDomain módszer túlterhelés. Vagy túlterhelés Load szerelési eljárás. Terhelést. ahol az első argumentum AssemblyName objektumot. azonosító terhelések a szerelvény.
AssemblyResolve eseménykezelő kap a megjelenítési név az összeállítás, amit akar letölteni, a ResolveEventArgs.Name tulajdon. Ha a felvezető nem ismeri a nevét, a szerelvény, visszatér NULL (Semmi Visual Basic, nullptr Visual C ++).
Ha a kezelő ismeri a nevét, a szerelvény, akkor töltse be, és visszatér a szerelvény, amely megfelel a kérelmet. néhány lehetséges forgatókönyvet az alábbi listában.
Ha a felvezető tudja a helyét a verzió a gyülekezési helyre, betölthet egy összeállítás segítségével a szerelési eljárás. LoadFrom illetve szerelvény. LoadFile, és ha minden jól megy, vissza a betöltött szerelvény.
Ha a processzor hozzáfér a szerelvény tárolt adatok egy sor bájt, akkor képes betölteni egy byte tömböt használja az egyik szerelési eljárás túlterhelés. Terhelést. vesz egy sor bájt.
A felvezető létrehozható dinamikus szerelési és vissza.
A felvezető kell tölteni az egységet a kontextus, amelyben a terhelés hajtjuk a csomagtartóban kontextus vagy az adott környezetben. Ha a felvezető betölt egy szerelvényt a reflexió csak kontextusban használja a szerelési eljárás. ReflectionOnlyLoad illetve szerelvény. ReflectionOnlyLoadFrom. megpróbálja betölteni, az eseményt kiváltó AssemblyResolve. Nem sikerül.
Felelősség a visszatérés a kapcsolódó összeszerelési fekszik az eseménykezelő. A felvezető képes feldolgozni a megjelenítési név a kért szerelvény halad ResolveEventArgs.Name ingatlan értéke AssemblyName (String) kivitelező. Mivel a .NET Framework 4, a felvezető használhat ResolveEventArgs.RequestingAssembly tulajdonság határozza meg, hogy az aktuális kérés függően más szerelvényt. Ez az információ segíthet megtalálni egy összeállítást, amely kielégíti a függőség.
Az eseménykezelő visszatérhet a változat a szerelvény kivételével kért.
A legtöbb esetben a szerelvény által visszaadott felvezető megjelenik a terhelés összefüggésben, függetlenül a környezetet, amelyben betölti a felvezető. Például, ha a felvezető használja a szerelési eljárás. LoadFrom betölteni a szerelvényt a kontextus, amelyben a terhelés végzik, az összeállítás jelenik összefüggésben a terhelést, ha a felvezető visszaadja. Azonban a következő esetekben kerül vissza a processzor által szerelvény nélkül kontextusban.
A felvezető betölti a szerelvény nélkül kontextusban.
Megkereső szerelvény (azaz a szerelvény vissza ResolveEventArgs.RequestingAssembly tulajdon) betöltött nélkül kontextusban.
További információ a kontextusban, lásd. A részben a módszer túlterhelés Közgyűlés. LoadFrom (karakterlánc).
Több verziója ugyanazon szerelvény lehet betölteni egy alkalmazási területen. Ezzel nem ajánlott, mert ez vezethet a problémák, mint a cél. Cm. Partition Ajánlások loading szerelvények.
Az alapvető szabály AssemblyResolve esemény feldolgozása, hogy ne próbálja, hogy visszatérjen egy összeállítást, amit nem ismer. Írásakor a felvezető kell tekinteni, ami miatt az építmények esetén. A felvezető kell NULL egyéb szerelvények.
Mivel a .NET Framework 4, AssemblyResolve esemény akkor a kisegítő szerelvények. Ez a változás egy eseménykezelő, hogy van írva korábbi verziói .NET Framework, ha a felvezető megpróbálja feloldani az összes kérést betölteni szerelvények. Ez a változás nem érinti az esemény rakodók amelyek figyelmen kívül hagyják el nem ismert szerelvény. Ilyen rakodók visszatérési értéke NULL, és a kiváltott hagyományos biztonsági mechanizmusokat.
Ha egy szerelvény van betöltve eseménykezelő ne használja a AppDomain módszer túlterhelés. Töltsön illetve szerelvény. Terhelést. ami miatt az esemény a rekurzív AssemblyResolve eseményeket. mivel ez ahhoz vezethet, hogy a verem túlcsordulás. (Lásd. Sorolja korábban ebben a fejezetben.) Ez történik akkor is, ha a fogantyú kivétel, mert a kivételt nem keletkezik, amíg az összes eseménykezelőkkel befejezte vissza. Így az alábbi kódot eredményez veremtúlcsordulás ha MyAssembly tárgy található.