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.
Megjegyzés:
Ez a cikk a .NET-keretrendszerre vonatkozik. Ez nem vonatkozik a .NET újabb implementációira, beleértve a .NET 6-os és újabb verzióit.
A .NET-keretrendszer alkalmazás sikeres üzembe helyezéséhez tisztában kell lennie azzal, hogy a közös nyelvi futtatókörnyezet hogyan találja meg és köti össze az alkalmazást alkotó szerelvényeket. Alapértelmezés szerint a futtatókörnyezet egy olyan szerelvény pontos verziójához próbál kötést kötni, amellyel az alkalmazás készült. Ezt az alapértelmezett viselkedést a konfigurációs fájl beállításai felülírhatják.
A közös futtatási környezet több lépést végez, amikor megpróbál megkeresni egy összeállítást és feloldani egy összeállítási hivatkozást. Minden lépést a következő szakaszokban ismertetünk. A keresés kifejezést gyakran használják annak leírására, hogy a futtatókörnyezet hogyan találja meg az assembly-ket; ez a heuraisztikus módszerek halmazára utal, amelyeket az assembly nevén és kultúráján alapuló megkereséshez használ.
Megjegyzés:
A kötési információkat a naplófájlban a Windows SDK-ban található szerelvénykötési naplónapló (Fuslogvw.exe) segítségével tekintheti meg.
A kötés elindítása
A szerelvényhez való helymeghatározás és kötés folyamata akkor kezdődik, amikor a futtatókörnyezet megpróbál feloldani egy másik szerelvényre mutató hivatkozást. Ez a hivatkozás lehet statikus vagy dinamikus. A fordító statikus hivatkozásokat rögzít a szerelvényjegyzék metaadataiban a létrehozáskor. A dinamikus hivatkozások menet közben jönnek létre különböző metódusok hívásával, például Assembly.Load.
Az összeállításra való hivatkozás ajánlott módja a teljes hivatkozás használata, beleértve az összeállítás nevét, verzióját, kultúráját és nyilvános kulcs jogkivonatát (ha létezik ilyen). A futtatókörnyezet ezeket az információkat használja a szerelvény megkereséséhez, a szakasz későbbi részében ismertetett lépéseket követve. A futtatókörnyezet ugyanazt a feloldási folyamatot használja, függetlenül attól, hogy a hivatkozás statikus vagy dinamikus szerelvényre vonatkozik-e.
Dinamikus hivatkozást is készíthet egy szerelvényre úgy, hogy a hívó metódusnak csak részleges információkat ad meg a szerelvényről, például csak a szerelvény nevét adja meg. Ebben az esetben a rendszer csak az alkalmazáskönyvtárat keresi a szerelvényben, és nincs más ellenőrzés. A részleges referenciát elkészítheti az összeállítások betöltésére szolgáló különböző módszerek bármelyikével, mint például Assembly.Load vagy AppDomain.Load.
Végül dinamikus hivatkozást készíthet egy olyan módszerrel, mint a Assembly.Load, és csak részleges információkat ad meg; ezt követően a hivatkozást finomítja az alkalmazás konfigurációs fájl <qualifyAssembly> elemével. Ez az elem lehetővé teszi a teljes referenciaadatokat (név, verzió, kultúra és adott esetben a nyilvános kulcs jogkivonata) az alkalmazáskonfigurációs fájlban a kód helyett. Ezt a technikát akkor érdemes használnia, ha az alkalmazáskönyvtáron kívüli szerelvényre mutató hivatkozást szeretne teljes mértékben minősíteni, vagy ha egy szerelvényre szeretne hivatkozni a globális szerelvény-gyorsítótárban, de a kód helyett a konfigurációs fájlban szeretné megadni a teljes hivatkozást.
Megjegyzés:
Ez a részhivatkozás-típus nem használható olyan szerelvényeknél, amelyek több alkalmazás között vannak megosztva. Mivel a konfigurációs beállítások alkalmazásonként vannak alkalmazva, és nem szerelvényenként, egy ilyen típusú részleges referenciát használó megosztott szerelvényhez a megosztott szerelvényt használó összes alkalmazásnak rendelkeznie kell a konfigurációs fájlban szereplő megfelelő információkkal.
A futtatókörnyezet az alábbi lépéseket hajtja végre a kódösszetevő-hivatkozás megoldására:
A megfelelő szerelvényverzió meghatározásához vizsgálja meg a vonatkozó konfigurációs fájlokat, köztük az alkalmazáskonfigurációs fájlt, a közzétevő házirendfájlját és a gépkonfigurációs fájlt. Ha a konfigurációs fájl egy távoli gépen található, a futtatókörnyezetnek először meg kell keresnie és le kell töltenie az alkalmazáskonfigurációs fájlt.
Ellenőrzi, hogy az assembly neve volt-e már összekötve, és ha igen, használja a korábban betöltött assembly-t. Ha egy korábbi kérés a szerelvény betöltésére sikertelen volt, a kérés azonnal sikertelen lesz, anélkül hogy újra megkísérelnék betölteni a szerelvényt.
Megjegyzés:
Az összeállítási kötések hibáinak gyorsítótárazása újdonság a .NET-keretrendszer 2.0-s verziójában.
Ellenőrzi a globális assembly gyorsítótárat. Ha a szerelvény ott található, a futtatókörnyezet ezt a szerelvényt használja.
Szondák a szerelvényhez az alábbi lépésekkel:
Ha a konfigurációs és közzétevői szabályzat nem befolyásolja az eredeti hivatkozást, és ha a kötési kérelem a Assembly.LoadFrom metódussal lett létrehozva, a futtatókörnyezet helymeghatározási tippeket keres.
Ha egy kódbázis található a konfigurációs fájlokban, a futtatókörnyezet csak ezt a helyet ellenőrzi. Ha ez a próbálkozás meghiúsul, a futtatókörnyezet megállapítja, hogy a kötési kérelem sikertelen volt, és nem történik más próbálkozás.
Mintavételek a szerelvényhez a próbaszakaszban leírt heurisztika használatával. Ha a szerelvény a vizsgálat után nem található, a futtatókörnyezet felkéri a Windows Installert, hogy biztosítsa a szerelvényt. Ez igény szerinti telepítési funkcióként működik.
Megjegyzés:
Az erős nevek nélküli szerelvények esetén nincs verzióellenőrzés, és a futtatókörnyezet sem vizsgálja őket a globális szerelvény-gyorsítótárban.
1. lépés: A konfigurációs fájlok vizsgálata
A szerelvénykötés viselkedése három XML-fájl alapján különböző szinteken konfigurálható:
Alkalmazáskonfigurációs fájl.
Közzétevő házirend fájlja.
Gépkonfigurációs fájl.
Ezek a fájlok ugyanazt a szintaxist követik, és olyan információkat nyújtanak, mint a kötési átirányítások, a kód helye és az egyes szerelvények kötési módjai. Minden konfigurációs fájl tartalmazhat egy <assemblyBinding> elemet , amely átirányítja a kötési folyamatot. A <assemblyBinding> elem gyermekelemei között megtalálható a <dependentAssembly> elem. Az elem gyermekei <dependentAssembly> közé tartoznak az <assemblyIdentity> elem, az <bindingRedirect> elem és az <codeBase> elem.
Megjegyzés:
A konfigurációs információk a három konfigurációs fájlban találhatók; nem minden elem érvényes az összes konfigurációs fájlban. A kötési mód és a privát elérési út adatai például csak az alkalmazáskonfigurációs fájlban lehetnek. Az egyes fájlokban található információk teljes listáját az Alkalmazások konfigurálása konfigurációs fájlok használatával című témakörben találja.
Alkalmazáskonfigurációs fájl
Először is a közös nyelvi futtatókörnyezet ellenőrzi az alkalmazás konfigurációs fájlját olyan információkért, amelyek felülírják a hívó szerelvény jegyzékfájljában tárolt verzióinformációkat. Az alkalmazáskonfigurációs fájl üzembe helyezhető egy alkalmazással, de nem szükséges az alkalmazás végrehajtásához. A fájl lekérése általában szinte azonnal megtörténik, de olyan helyzetekben, amikor az alkalmazás alapja egy távoli számítógépen található, például webalapú forgatókönyv esetén, a konfigurációs fájlt le kell tölteni.
Az ügyfél végrehajtható fájljai esetében az alkalmazáskonfigurációs fájl ugyanabban a könyvtárban található, mint az alkalmazás végrehajtható fájlja, és ugyanazzal az alapnévvel rendelkezik, mint egy .config kiterjesztésű végrehajtható fájl. A C:\Program Files\Myapp\Myapp.exe konfigurációs fájlja például C:\Program Files\Myapp\Myapp.exe.config. Böngészőalapú forgatókönyv esetén a HTML-fájlnak az <link> elem használatával kell explicit módon a konfigurációs fájlra mutatnia.
Az alábbi kód egy alkalmazáskonfigurációs fájl egyszerű példáját tartalmazza. Ez a példa hozzáad egy TextWriterTraceListener fájlt a gyűjteményhez, amely lehetővé teszi a Listeners hibakeresési adatok fájlba történő felvételét.
<configuration>
<system.diagnostics>
<trace useGlobalLock="false" autoflush="true" indentsize="0">
<listeners>
<add name="myListener" type="System.Diagnostics.TextWriterTraceListener, system version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" initializeData="c:\myListener.log" />
</listeners>
</trace>
</system.diagnostics>
</configuration>
Közzétevői szabályzati fájl
Másodszor, a futtatókörnyezet megvizsgálja a közzétevői házirendfájlt, ha van ilyen. A közzétevői házirendfájlokat egy összetevő közzétevője által javításként vagy frissítésként egy megosztott összetevőhöz terjesztik. Ezek a fájlok olyan kompatibilitási információkat tartalmaznak, amelyeket a megosztott összetevő közzétevője adott ki, amely egy szerelvényhivatkozást egy új verzióra irányít. Az alkalmazás- és gépkonfigurációs fájloktól eltérően a közzétevő házirendfájljai a saját assemblyjükben találhatók, amelyeket telepíteni kell a globális szerelvénygyorsítótárba.
Az alábbi példa egy Publisher Policy-konfigurációs fájlra mutat be példát:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="asm6" publicKeyToken="c0305c36380ba429" />
<bindingRedirect oldVersion="3.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Szerelvény létrehozásához használhatja a Al.exe (Assembly Linker) eszközt az alábbi parancsokkal:
Al.exe /link:asm6.exe.config /out:policy.3.0.asm6.dll /keyfile: compatkey.dat /v:3.0.0.0
compatkey.dat egy erős nevű kulcsfájl. Ez a parancs létrehoz egy erős nevű szerelvényt, amelyet elhelyezhet a globális szerelvény-gyorsítótárban.
Megjegyzés:
A közzétevői szabályzat minden olyan alkalmazást érint, amely megosztott összetevőt használ.
A közzétevő házirend konfigurációs fájlja felülírja az alkalmazásból (vagyis a szerelvényjegyzékből vagy az alkalmazáskonfigurációs fájlból) származó verzióadatokat. Ha az alkalmazáskonfigurációs fájlban nincs utasítás a szerelvényjegyzékben megadott verzió átirányítására, a közzétevő házirendfájlja felülírja a szerelvényjegyzékben megadott verziót. Ha azonban egy átirányítási utasítás szerepel az alkalmazáskonfigurációs fájlban, a közzétevői szabályzat felülírja ezt a verziót a jegyzékben megadott helyett.
A rendszer közzétevői szabályzatfájlt használ egy megosztott összetevő frissítésekor, és a megosztott összetevő új verzióját az adott összetevőt használó összes alkalmazásnak át kell vennie. A közzétevő házirendfájljának beállításai felülírják az alkalmazáskonfigurációs fájl beállításait, kivéve, ha az alkalmazáskonfigurációs fájl a biztonságos módot érvényesíti.
Csökkentett mód
A Publisher szabályzatfájljai általában kifejezetten egy szervizcsomag vagy programfrissítés részeként vannak telepítve. Ha bármilyen probléma adódik a frissített megosztott összetevővel, a közzétevő házirendfájljában lévő felülírásokat figyelmen kívül hagyhatja csökkentett módban. A biztonságos módot a <publisherPolicy apply="yes|no"/> elem határozza meg, amely csak az alkalmazás konfigurációs fájlban található. Meghatározza, hogy a közzétevői házirend konfigurációs adatait el kell-e távolítani a kötési folyamatból.
A biztonságos mód beállítható a teljes alkalmazáshoz vagy a kiválasztott összetevőkhöz. Vagyis kikapcsolhatja a szabályzatot az alkalmazást alkotó összes szerelvények esetében, vagy egyes szerelvényeknél bekapcsolhatja, másoknál azonban nem. Ha szelektíven szeretné alkalmazni a közzétevői szabályzatot az alkalmazást alkotó szerelvényekre, állítsa be a <publisherPolicy apply=no/> beállítást, és adja meg, hogy mely szerelvényekre legyen hatással a <dependentAssembly> elem használatával. Ha az alkalmazást alkotó összes összetevőre szeretné alkalmazni a kiadói házirendet, állítsa be a <publisherPolicy apply=no/> értéket függő összetevők nélkül. A konfigurációról további információt az Alkalmazások konfigurálása konfigurációs fájlok használatával című témakörben talál.
Gép konfigurációs fájlja
Harmadszor, a futtatókörnyezet megvizsgálja a gép konfigurációs fájlját. Ez a Machine.confignevű fájl a helyi számítógépen található annak a gyökérkönyvtárnak a Konfiguráció alkönyvtárában, ahol a futtatókörnyezet telepítve van. Ezt a fájlt a rendszergazdák használhatják az adott számítógépen helyi szerelvénykötési korlátozások megadására. A gép konfigurációs fájljának beállításai elsőbbséget élveznek az összes többi konfigurációs beállításnál; Ez azonban nem jelenti azt, hogy minden konfigurációs beállítást be kell helyezni ebbe a fájlba. A rendszergazdai házirendfájl által meghatározott verzió végleges, és nem bírálható felül. A Machine.config fájlban megadott felülbírálások minden alkalmazást érintenek. A konfigurációs fájlokról további információt az Alkalmazások konfigurálása konfigurációs fájlok használatával című témakörben talál.
2. lépés: A korábban hivatkozott összeállítások ellenőrzése
Ha a kért szerelvényt az előző hívásokban is kérték, a közös nyelvi futtatókörnyezet a már betöltött szerelvényt használja. Ennek következményei lehetnek az alkalmazásokat alkotó szerelvények elnevezésekor. Az összeállítások elnevezéséről további információt az Assembly Names című témakörben talál.
Ha a szerelvény korábbi kérése sikertelen volt, akkor a szerelvény további kérései azonnal sikertelenek lesznek anélkül, hogy megpróbálnánk betölteni a szerelvényt. A .NET-keretrendszer 2.0-s verziójától kezdve a rendszer gyorsítótárazza a szerelvény kötési hibáit, és a gyorsítótárazott információk alapján állapítja meg, hogy megkísérli-e betölteni a szerelvényt.
Megjegyzés:
Ha vissza szeretne térni a .NET-keretrendszer 1.0-s és 1.1-es verziójának viselkedéséhez, amely nem gyorsítótárazta a kötési hibákat, vegye fel az elemet a <disableCachingBindingFailures> konfigurációs fájlba.
3. lépés: Az Assembly gyorsítótár ellenőrzése
Az erős névvel ellátott szerelvények esetében a kötési folyamat a globális szerelvény-gyorsítótárban folytatódik. A globális assembly gyorsítótár olyan assembly-ket tárol, amelyeket egy számítógépen több alkalmazás is használhat. A globális assemblytárban lévő minden assemblynek erős névvel kell rendelkeznie.
4. lépés: A szerelvény keresése kódbázisokon vagy felderítéssel
Miután a megfelelő szerelvényverziót a hívó szerelvény referenciájában és a konfigurációs fájlokban található információk felhasználásával határozták meg, és miután bejelentkezett a globális szerelvény-gyorsítótárba (csak erős nevű szerelvények esetén), a közös nyelvi futtatókörnyezet megpróbálja megtalálni a szerelvényt. A szerelvények helyének kiválasztásának folyamata a következő lépéseket foglalja magában:
<Ha egy codeBase-elem> található az alkalmazáskonfigurációs fájlban, a futtatókörnyezet ellenőrzi a megadott helyet. Ha egyezést talál az összetevőben, azt az összeállítást használja, és nem történik keresés. Ha a szerelvény nem található ott, az összekapcsolási kérelem meghiúsul.
A futtatókörnyezet ezután a szakasz későbbi részében megadott szabályok alapján keresést végez a hivatkozott szerelvény után.
Megjegyzés:
Ha egy szerelvény több verziójával rendelkezik egy könyvtárban, és a szerelvény egy adott verziójára szeretne hivatkozni, a <codeBase> elemet kell használnia a privatePath<próbaelem> attribútuma helyett. Ha a <próba> elemet használja, a futtatókörnyezet leállítja a próbaidőt, amikor először talál egy olyan szerelvényt, amely megfelel a hivatkozott egyszerű szerelvénynévnek, függetlenül attól, hogy helyes-e. Ha helyes az egyezés, akkor a rendszer ezt a szerelvényt használja. Ha nem megfelelő egyezés, a próba leáll, és a kötés meghiúsul.
Az összeállítás megtalálása a kódbázisokon keresztül
A codebase-információk egy konfigurációs fájlban lévő codeBase-elem< használatával> adhatók meg. Ezt a kódbázist mindig ellenőrzi a rendszer, mielőtt a futtatókörnyezet megkísérli keresni a hivatkozott szerelvényt. Ha a végleges verzióátirányítást tartalmazó közzétevői szabályzatfájl tartalmaz egy <codeBase-elemet> is, az a <codeBase-elem>, amely lesz használva. Ha például az alkalmazáskonfigurációs fájl egy< codeBase-elemet> ad meg, és az alkalmazásinformációkat felülíró közzétevői házirendfájl szintén <egy codeBase> elemet ad meg, akkor a <rendszer a közzétevő házirendfájl codeBase> elemét használja.
Ha a codeBase< elem által> megadott helyen nem található egyezés, a kötési kérelem meghiúsul, és nem történik további lépés. Ha a futtatókörnyezet megállapítja, hogy egy szerelvény megfelel a hívó szerelvény kritériumainak, ezt a szerelvényt használja. A megadott <codeBase-elem> által megadott fájl betöltésekor a futtatókörnyezet ellenőrzi, hogy a név, a verzió, a kultúra és a nyilvános kulcs megegyezik-e a hívó szerelvény referenciájával.
Megjegyzés:
Az alkalmazás gyökérkönyvtárán kívüli hivatkozott szerelvényeknek erős névvel kell rendelkezniük, és vagy a globális szerelvénygyorsítótárban kell telepítve lenniük, vagy a <codeBase> elemmel kell megadni.
A szerelvény lokalizálása próbálkozások útján
Ha az alkalmazáskonfigurációs fájlban nincs <codeBase-elem> , a futtatókörnyezet négy feltétel alapján mintavételezi a szerelvényt:
Az alkalmazás alapja, amely az alkalmazás végrehajtásának gyökérhelye.
Kultúra, amely a hivatkozott közgyűjtemény kulturális attribútuma.
Név, amely a hivatkozott szerelvény neve.
A
privatePathpróbaelem< attribútuma>, amely a gyökérhely alatti alkönyvtárak felhasználó által definiált listája. Ez a hely megadható az alkalmazáskonfigurációs fájlban és a felügyelt kódban egy alkalmazástartomány tulajdonságával AppDomainSetup.PrivateBinPath . Ha a felügyelt kódban van megadva, a rendszer először a felügyelt kódotprivatePathmintavételezi, majd az alkalmazáskonfigurációs fájlban megadott elérési utat.
Az alkalmazási bázis és a kultúrakönyvtárak vizsgálata
A futtatási környezet mindig az alkalmazás alapkönyvtárában kezdi meg a keresést, amely lehet URL-cím vagy az alkalmazás gyökérkönyvtára a számítógépen. Ha a hivatkozott szerelvény nem található az alkalmazásbázisban, és nincs megadva kulturális információ, a futtatókörnyezet megkeresi a szerelvény nevét tartalmazó alkönyvtárakat. A mintavételezett könyvtárak a következők:
[alkalmazásbázis] / [szerelvény neve].dll
[alkalmazásbázis] / [szerelvény neve] / [szerelvény neve].dll
Ha a hivatkozott összeállításhoz kulturális információ van megadva, a rendszer csak a következő könyvtárakat vizsgálja:
[alkalmazásbázis] / [kultúra] / [szerelvény neve].dll
[alkalmazásbázis] / [kultúra] / [szerelvény neve] / [szerelvény neve].dll
Próbaidő a privatePath attribútummal
A kulturális alkönyvtárakon és a hivatkozott összeszereléshez elnevezett alkönyvtárakon kívül a futásidejű környezet a szondázási elem privatePath megadott könyvtárakat is vizsgálja.< Az attribútum használatával megadott könyvtáraknak az privatePath alkalmazás gyökérkönyvtárának alkönyvtárainak kell lenniük. A vizsgált mappák a hivatkozott assembly-kérelemben szereplő kultúrainformáció függvényében változnak.
A futtatókörnyezet leállítja a keresést, amint talál egy összeállítást, amely megfelel a hivatkozott egyszerű összeállításnévnek, függetlenül annak helyességétől. Ha helyes az egyezés, akkor a rendszer ezt a szerelvényt használja. Ha nem megfelelő egyezés, a próba leáll, és a kötés meghiúsul.
Ha a kultúra szerepel a fájlban, a rendszer a következő könyvtárakat ellenőrzi:
[alkalmazásbázis] / [binpath] / [kultúra] / [szerelvény neve].dll
[alkalmazásbázis] / [binpath] / [kultúra] / [szerelvény neve] / [szerelvény neve].dll
Ha a kulturális adatok nem szerepelnek a fájlban, a rendszer a következő könyvtárakat ellenőrzi:
[alkalmazásbázis] / [binpath] / [szerelvény neve].dll
[alkalmazásbázis] / [binpath] / [szerelvény neve] / [szerelvény neve].dll
Vizsgálati példák
A következő információkra tekintettel:
Hivatkozott szerelvény neve: myAssembly
Alkalmazás gyökérkönyvtára:
http://www.code.microsoft.com< >A konfigurációs fájl próbaeleme a következőt adja meg: bin
Kultúra: de
A futtatókörnyezet a következő URL-címeket mintavételezi:
http://www.code.microsoft.com/de/myAssembly.dllhttp://www.code.microsoft.com/de/myAssembly/myAssembly.dllhttp://www.code.microsoft.com/bin/de/myAssembly.dllhttp://www.code.microsoft.com/bin/de/myAssembly/myAssembly.dll
Több azonos nevű szerelvények
Az alábbi példa bemutatja, hogyan konfigurálhat több szerelvényt ugyanazzal a névvel.
<dependentAssembly>
<assemblyIdentity name="Server" publicKeyToken="c0305c36380ba429" />
<codeBase version="1.0.0.0" href="v1/Server.dll" />
<codeBase version="2.0.0.0" href="v2/Server.dll" />
</dependentAssembly>
Egyéb mintavételezett helyek
Az szerelvény helye az aktuális kötési környezettel is meghatározható. Ez leggyakrabban akkor fordul elő, ha a Assembly.LoadFrom módszert használják, és com-interop forgatókönyvekben. Ha egy szerelvény egy másik szerelvényre hivatkozik a LoadFrom metódussal, a hívó szerelvény helye egy tippnek számít a hivatkozott szerelvény megkereséséhez. Ha talál egyezést, a rendszer betölti a szerelvényt. Ha nem talál egyezést, a futtatókörnyezet a keresési folyamatot folytatja, majd lekérdezi a Windows Installert a szerelvény előállításához. Ha nincs megadva olyan szerelvény, amely megfelel a kötési kérelemnek, a rendszer kivételt küld. Ez a kivétel egy TypeLoadException felügyelt kódban található, ha egy típusra hivatkoztak, vagy FileNotFoundException ha a rendszer nem talált betöltendő szerelvényt.
Ha például az Assembly1 az Assembly2-re hivatkozik, és az Assembly1-et letöltötték, http://www.code.microsoft.com/utils akkor ez a helyszín utalásként szolgál Assembly2.dllmegkereséséhez. A futtatókörnyezet ezután megkeresi a szerelvényt http://www.code.microsoft.com/utils/Assembly2.dll és http://www.code.microsoft.com/utils/Assembly2/Assembly2.dll-ben. Ha a Assembly2 egyik helyen sem található, a futtatókörnyezet lekérdezi a Windows Installert.