Global Assembly Cache

Global Assembly Cache

Most már tudjuk, hogyan kell létrehozni egy szerelvény egy erős név - itt az ideje, hogy megtanulják, hogyan kell telepíteni ezeket a szerelvényeket, és hogyan CLR metaadatok, hogy keresse meg és töltse be a szerelvényt.

Ha az egység kell osztani több alkalmazás, akkor kell helyezni egy ismert könyvtárba, hogy a CLR automatikusan ellenőrizze, hogy talál egy hivatkozást az összeállítás. A hely, ahol megosztott szerelvények, az úgynevezett globális Assembly Cache (globális szerelvény cache, GAC). Általában a C: \ Windows \ Assembly (feltételezi, hogy a Windows telepítve van a C: \ Windows).

GAC különleges szerkezete és tartalmaz több beágyazott katalizátorai naplók, akiknek a neve által generált egy bizonyos algoritmus. Semmilyen körülmények között nem szabad másolni a fájlokat a szerelvények a GAC ​​kézzel - ehelyett fel kell használni az eszközöket létre kifejezetten erre a célra. Ezek az eszközök „tudja” a belső szerkezete a GAC, és képesek generálni túl- fekvő alkönyvtár nevét.

A fejlesztés során és tesztelése szerelvények erős nevek telepíteni őket a GAC ​​könyvtárban a leggyakrabban használt GACUtil.exe eszköz. Indított paraméterek nélkül, akkor megjeleníti a következő információkat:

Okozva GACUtil.exe közüzemi paraméterrel / i, telepítheti a szerelvényt GAC mappában, ha a paraméter / u, az összeállítást eltávolítjuk a GAC. Megjegyezzük, hogy a szerelvény laza nevet nem lehet elhelyezni a GAC. Ha át GACUtil.exe a laza nevű összeállítási fájl, az eszköz megjelenik a következő hibaüzenetet (error hozzátéve szerelvényt a cache: megpróbál telepíteni egy szerelvény nélkül, erős név):

Megjegyzés. Alapértelmezett könyvtár manipuláció GAC csak elvégezni a csoport tagjai Wipdows Admipistrators (adminisztrátorok) vagy Power Users (haladó felhasználóknak). GACUtil.exe nem tudja telepíteni vagy eltávolítani az összeállítás hívás esetén a segédprogram felhasználó nem tartoznak ebbe a csoportba.

Paraméter / i GACUtil.exe segédprogram nagyon hasznos a fejlesztő a tesztelés során. Azonban, ha GACUtil.exe összeállítás bevezetéshez a termelési környezet ajánlott paraméter / r, amellett, hogy / i - a telepítés során, és / u - amikor eltávolítja a szerelvény. A / r biztosítja szerelvény integrációs mechanizmust kell telepíteni és eltávolítani a Windows programok. Lényegében a közüzemi miatt ez a paraméter azt mondja a rendszer bármilyen alkalmazás a szerelést, és összeköti vele.

Megjegyzés. Amennyiben a szerelvény egy erős név van csomagolva a CAB fájl tömörítve vagy bármilyen más módon, akkor mielőtt telepíti összeszerelő fájlt a GAC ​​könyvtárat GACUtil.exe segédprogram kitömörítenie egy ideiglenes fájl, ami után el kell távolítani a összeszerelő üzem.

GACUtil.exe segédprogram nem tartalmazza a szabadon terjeszthető NET Framework szánt csomag a végfelhasználó. Ha az alkalmazásnak van a build kell telepíteni a GAC ​​könyvtárból a Windows Installer programot (MSI), mivel ez az egyetlen eszköz, amely lehet telepíteni egy összeállítást a GAC ​​és garantált, hogy bemutassa a végén felhasználó gépére.

Miért „regisztráció” a szerelvényt GAC könyvtárban? Képzeljük el, hogy a két vállalat mindent fogkő az összeszerelés, amely egyetlen file: Calculus.dll. Nyilvánvaló, hogy ezeket a fájlokat nem lehet leírni ugyanabban a könyvtárban, mint a fájl másolt utolsó felülírja az első, és így romboló minden alkalmazást. Ha telepíti a GAC, hogy egy speciális eszköz, akkor létre a C: \ Wipdows \ Assembly külön mappákba ilyen berendezésre és másolja az egyes építeni a saját mappába.

Általában a felhasználók nem böngészik a szerkezet a GAC, így az Ön számára nem igazán számít. Elég katalizálja GAC ​​CLR napló szerkezete ismert és szerszámok működő GAC.

Az elrendezés a szerelvény, utalva a szerelvény egy erős nevét

Bármit építsenek, vagy össze eredményeként mindig kiderül az összeállítás, amely hivatkozik a másik szerelvény egy erős nevét. Ez akkor is igaz, ha csak azért, mert System.Object osztály határozza Mscorlib.dll, az összeállítás egy erős nevét. Ugyanakkor valószínű, hogy a szerelvény is utal más típusú erős nevű szerelvények által kiadott, a Microsoft, a külső fejlesztők, vagy létre a szervezetben. 2. fejezet megmutatja, hogyan kell használni a paramétert compiler CSC.exe / referencia szerelvények meghatározására, amelyre hivatkozni kell alakítható szerelvény. Ha a fájl nevét adja meg a teljes elérési útvonalát, CSC.exe betölti a megadott fájlt, és használja a metaadatok elrendezés szerelvény. Amint azt a 2. fejezetben, ha megadja a fájlnevet egy utat, csc.exe próbálják megtalálni a szerelvényt, a következő könyvtárakban (megtekintésével őket abban a sorrendben jelennek meg itt, Ka com).

1. A munka könyvtárba.
2. A könyvtár, ahol a fájlt CSC.exe. Ez a könyvtár tartalmazza a CLR DLL könyvtár.
3. katalógusok megadott parancssori paraméter / li b hívás esetén CSC.ehe.
4. A felsorolt ​​könyvtárak a környezeti változó LIV.

Így össze a szerelvény olyan fájlra System.Drawing.dll Microsoft fejlesztése, amelyben CSC.exe beállíthatja a paraméter / referencia: System.Drawing.dll. A fordítóprogram ellenőrizze a felsorolt ​​könyvtárak és érzékeli System.Drawing.dll fájlt ugyanabban a könyvtárban, mint a fájl a CLR, amit arra használ, hogy megteremtse a szerelvény. Azonban annak ellenére, hogy a fordítás során a közgyűlés ebben a könyvtárban, a végrehajtása során a szerelvény van betöltve egy másik könyvtárba.

A telepítés során a .NET Framework-összeállítást az összes fájl által létrehozott Microsoft, telepített két példányban. Egy készlet fájlok tárolhatók ugyanabban a könyvtárban, a CLR, a másik pedig GAC könyvtárban. A fájlokat a CLR mappaszerkezetét megkönnyítik az egyéni összeállítások és másolni a GAC ​​hivatott betölteni a futás során.

CSC.exe segédprogram nem néz a kívánt elrendezést a szerelvényt GAC, így nem kell megadni a fájl elérési útját terjedelmes összeállítás. CSC.exe is lehetővé teszi, hogy a szerelvény útján legalább egy hosszú, de egy kicsit több kecses vonalai a következő formában:

Mindkét módszer olyan ügyetlen, hogy úgy döntöttek, hogy válasszon a telepítést a felhasználó merevlemezén szerelvények a két példányban a fájlokat.

Megjegyzés. Amikor összekötő szerelvény néha szükséges utalni a másik egység, amely két változatban létezik - x86 és x64. Szerencsére alkönyvtárak GAC tárolhatja x86 és x64 változatai ugyanabban a szerkezetben. De mivel ezek a szerelvények egy név, nem lehet őket helyezni ugyanabban a könyvtárban, mint a CLR. De ez nem számít, ha telepíti a .NET Framework x86, x64 vagy IA64 szereltek a CLR könyvtárban. akkor nézze meg olyan verziója a korábban telepített fájlokat, az összes verzió tartalmazza a metaadat, és csak abban különböznek az elrendezés a kódot szerelvény. Végrehajtása során a szükséges verzióját az összeállítást betöltött alkönyvtár vagy GAC_32 GACJ54. Később ebben a fejezetben azt mutatja, hogy a futási CLR határozza meg, ahol betölteni a szerelvény.

Ellenállás szerelés szigorú nevek jogosulatlan módosítás

Az egyrészről a privát kulcsot gondoskodik arról, hogy a jogosult a megfelelő nyilvános kulcs az összeállítás gyártója. Amikor telepíti a szerelvényt GAC rendszer kiszámolja a hash a tartalmát a fájlt és összehasonlítja a kapott értéket az RSA digitális aláírás ágyazva a PE kép (kitermelése után az aláírást a nyilvános kulcs). Az identitás értékek azt jelenti, hogy a tartalmát a fájl megváltozott, és hogy a nyilvános kulcs aláírás megfelel a privát kulcs a kiadó. Ezen túlmenően, a rendszer kiszámítja a hash tartalmának más fájlokat az összeszerelési és összehasonlítja az értékeknek a manifeszt táblázatok Fi l eDef. Ha legalább az egyik érték nem egyezik meg, az azt jelenti, hogy legalább az egyik összeállítási fájl módosítva lett és a telepítés a szerelvényt a GAC ​​könyvtárban nem.

Megjegyzés. Ez a mechanizmus biztosítja, hogy csak a fájl tartalmát integritását; hitelességét a kiadó garantálja csak akkor, ha teljesen biztos, hogy van egy nyilvános kulcsot által generált a kiadó, és a kiadó privát kulcs nem került veszélybe. Ha egy kiadó kíván társítani összeszerelésével identitásukat, meg kell emellett kihasználja a Microsoft Authenticode technológia.

Amikor az alkalmazás kell kötődni a szerelvényt, amelyre vonatkozik, a CLR használ, hogy megtalálja ezt a szerelvényt a GAC ​​tulajdonságait (név, verzió, regionális szabványok és nyilvános kulcs). Ha a kívánt összeállítást talál, akkor visszaadja a könyvtár elérési útját, amelyben él, és a fájl betöltődik a kiáltványt. Az ilyen egységek keresési mechanizmus biztosítja a hívó, hogy a futási betölti a szerelvény kiadója, aki létrehozta a szerelvény, amely összeállított programot. Ez a garancia miatt lehetséges a megfelelő nyilvános kulcs token tárolt AssemblyRef hivatkozva a szerelvény asztal, a nyilvános kulcsot a szerelvény AssemblyDef hivatkozott táblákból. Ha a hívó nem a szerelvény a GAC, a CLR először nézd meg azt a könyvtárát a kérelmet, majd ellenőrzi az összes zárt pályák amelyet a konfigurációs fájlban, akkor, ha az alkalmazás telepítve van a MSI, a CLR kérdezi MSI megtalálni a megfelelő szerkezetet. Ha ezek egyike sem opciók nem összeállítva, a kötődési sikertelen és egy kivételt dob ​​System.IO.Fi l eNotFoundException.

Megjegyzés. Amikor a szerelvény egy erős név betölt GAC könyvtár, a rendszer biztosítja, hogy a fájlokat tartalmazó kiáltványt, ellenáll a jogosulatlan módosítás. Ez az ellenőrzés végrehajtására csak egyszer a telepítés során. A teljesítmény javítása érdekében a CLR nem ellenőrzi, hogy a fájlokat illegálisan módosított, és betölteni az alkalmazás domain teljes joggal. Ugyanakkor, amikor a szerelvény egy erős neve nincs letölthető a katalógus GAC, CLR futásidejű ellenőrzi a szerelvény nyilvánvaló fájlt, hogy megbizonyosodjon arról, hogy ellenáll a jogosulatlan módosítását, figyelembe véve a plusz időt, hogy ellenőrizze minden alkalommal, amikor a fájl letöltésére.

Betöltésekor szerelvény nem erős neve GAC, míg a másik könyvtárból (applikációs katalógus vagy könyvtárat codeBase elem értékét a konfigurációs fájlban) CLR ellenőrzi a hash. Más szóval, ebben az esetben a hash számítás a fájl lefut minden alkalommal az alkalmazás indításakor. Bár ez némileg csökken a sebesség, ezen intézkedések nélkül nem tudja garantálni, hogy a tartalma a szerelvény nincs kitéve illetéktelen módosítását. Miután megtalálták a „futási hash érték eltérés, CLR kivételt állít System.IO.File L oadException.

Korábban ebben a fejezetben tárgyalja eljárás egy kriptográfiai kulcspár használatával SN.exe segédprogramot. Ez a segédprogram generálja a kulcsokat, így a funkciók által nyújtott Microsoft kriptográfiai API felületet nevezzük CryptoAPI. A kapott kulcsokat tárolhatjuk tárolóeszközök összes fájlt. Például, a nagy szervezetek (például a Microsoft) generálunk privát kulcsokat tárolt hardver eszközök biztonságos, és néhány ember a személyzet a cég férhetnek hozzá a privát kulcsot. Ezek az óvintézkedések megakadályozzák a kompromisszum egy privát kulcs, és biztosítja annak sértetlenségét. Nos, a nyilvános kulcsot, természetesen, a köz- és ingyenes.

Ha készen áll, hogy építsenek az elrendezés egy erős nevét, be kell jelentkeznie a privát kulcsot. Azonban a fejlesztés és a tesztelés a szerelés nagyon kényelmetlen, majd vonjuk ki a privát kulcsot, hogy a tárolt „mögött hét pecsét”, így a .NET Framework támogatja halasztott (késleltetett aláírása), vagy részleges (parciális aláírás), az aláíró. Késleltetett aláírás lehetővé teszi, hogy állítsa össze a szerelvényt a nyilvános kulcs a cég anélkül, hogy a privát kulcsot. A nyilvános kulcs segítségével beágyazni a felvétel szerelvény AssemblyRef asztalok, linket a szerelés, a jogot, hogy megkapja a nyilvános kulcs értékét, valamint helyesen keresse meg a szerelvényt a belső szerkezete a GAC. Aláírás nélkül egy privát kulcsot, akkor teljesen elveszti a védelmet az illetéktelen módosítás, mivel ez nem számított hash épít, és a digitális aláírás nem szerepel a fájlban. Azonban ebben a szakaszban még nem jelent problémát, mert aláírta a szerelvény késik csak az idő a fejlesztés, és készen áll a csomagolás és a telepítési összeállítást által aláírt egy privát kulcsot.

Jellemzően a vállalat nyilvános kulcsot kapunk egy fájl, és öntsük a közművek, összegyűjti a szerelvény. (Mint korábban említettük, ebben a fejezetben kicsomagolni a nyilvános kulcsot tartalmazó fájl kulcspár, akkor hívja a közüzemi SN.exe a -p opcióval.) Meg kell határoznia, összeszereli pro- gram szerelni, hogy aláírásával várni kell, hogy az egyik, hogy úgy van kialakítva, anélkül, hogy a privát kulcsot. A C # fordító erre lehetőség / delaysign. A Visual Studio, a Project Properties ablak, el kell menni a Sigpipg fülre, és jelölje be Delay sigp oplu. Ha AL.exe közművek szükséges paramétert / késleltetés [jel].

Amikor felfedezte, hogy a szerelvény aláírása késik fordítóprogram vagy AL.exe segédprogram egy metaadat táblázat szerelvény AssemblyDef rekordot nyitott kulcs összeállítás. Mint általában, a jelenléte a nyilvános kulcs segítségével helyezze a szerelvényt a GAC, valamint hozzon létre más összeállítások hivatkoznak rá, míg azok a bejegyzések metaadat AssembyRef asztal kijavítjuk nyilvános kulcs értékét. Amikor építeni a szerelvényt kapott PE fájl egy helyen RSA digitális aláírás. (Összeszereli hasznosság határozza meg a szükséges hely alapján a méret a nyilvános kulcs.) By the way, és ezúttal a fájl hash nem kell kiszámítani.

Ebben a szakaszban a kapott összeállítás érvényes digitális sub pisi. Megkísérli telepíteni ezt a szerelvényt a GAC ​​sikertelen lesz, mert a hash-t a fájl tartalma nem volt célja, hogy létrehozza a megjelenése fájl korrupció. Annak érdekében, hogy hozzanak létre egy ilyen összeállítás a GAC, akkor le kell tiltani a rendszer integritásának ellenőrzése fájlokat a szerelvény hívja a közüzemi SN.exe a parancssori paramétert -VR. Hívjon SN.exe ezzel a paraméterrel is kényszeríti a CLR, hogy kihagyja a hash ellenőrzése az összes fájlt az összeállítás amikor betöltött. A szempontból a belső mechanizmusokat a rendszer, amelyben -VR közüzemi SN.exe biztosít szállást szerelvény azonosító információk különböző cégnyilvántartási HKEY_LOCAL_ MACHINE \ SOFTWARE \ Microsoft \ StrongName \ azonosításhoz.

Megjegyzés. Ha a szerszámot, amelynek a nyilvántartáshoz való hozzáférés, szükséges annak biztosítása, hogy a 64 bites platform használunk megfelelő 64 bites segédprogram. Alapértelmezésben a segédprogram 32 bites x86-os platform van telepítve a C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v7.0A \ bi n \ NETFX 4.0 eszközök, valamint a közüzemi 64 bites x64-platform a C: \ Program Files (x86) \ Microsoft SDK \ Windows \ v7.0A \ b \ NETFX 4,0 Tools \ x64.

Végül vizsgált épület kell cégszerűen aláírt lehetővé tenni a csomagolásból és telepítését. Ahhoz, hogy írja alá a szerelvény ismét hívja a közüzemi Sn.exe, de ezúttal a lehetőséget -R, meghatározva a fájl nevét tartalmazó privát kulcs van jelen. -R opció teszi SN.exe számítani hash jelentkezzen privát kulcsot, és a fájl tartalmát kell beágyazni RSA digitális aláírás a fenntartott helyet. Ezt követően aláírt minden a szabályok a szerelvény készen áll a bevetésre. Azt is megszünteti a build vizsgálat, megkérdezése SN.exe paraméterrel -Vu vagy -Vx.

A teljes műveletsort létre egy egységet halasztott aláírása a következő.

1. A fejlesztés során a szerelvény kapjon tartalmazó fájl kulcsa a nyitott társaság, és adjunk hozzá paraméterek / keyfile és / delaysign a futószalagról összeállítása:

2. összeszerelése után a megállapodás szükséges a parancs végrehajtásához alább látható, hogy a lehetőséget, hogy teszteljék ezt az építményt, telepítse a GAC ​​könyvtárat és épít más részegységek rá hivatkozó. előzetesen megfelelően teljesíti ezt a parancsot csak egyszer, nem kell csinálni minden elrendezés szerelvény.

3. Ha készen áll, hogy a csomag és telepíteni a szereléshez szükséges kapni lezárások kulcsfontosságú vállalatok és hajtsa végre a következő a parancs. Érdemes lehet telepíteni egy új változata a GAC, de ne próbálja csinálni, mielőtt végrehajtja a 4. lépést.

4. Annak érdekében, hogy teszteljék a valós körülmények között a szerelvény, hogy lehetővé tegye szkennelés ismét futtassa a következő parancsot:

Ha a kulcspár tárolt SSR tartályban, szükség van más beállítások elérésekor közművek CSC.exe, AL.exe és SN.exe. Amikor fordítok (CSC.exe) helyett / keyfile használata szükséges paramétert / keycontainer, amikor összekötő (AL.exe) - paraméter / keyname helyett / keyfile, míg SN.exe hívást adni a privát kulcs a szerelvény, amely késik aláírásával - -R opció helyett -R. SN.exe támogatja további lehetőségek dolgozó CSP.

Megjegyzés. Ahhoz, hogy elhalasztja az aláírását kényelmes, ha azt szeretné, hogy végre minden műveletet az összeállítás előtt a telepítés. Például előfordulhat, hogy alkalmazni kell a védő szerelő szerszámok, drasztikusan módosító kódot. Aláírását követően a szerelvény erre nem fog sikerülni, mert a hash érvényét veszti. Tehát, ha az összekötő szerelvény szükséges, hogy megvédjék a lebontás, vagy más műveleteket végezni rajta, szükséges alkalmazni a módszert a késedelem aláírását. A végén meg kell futtatni a segédprogramot a -R SN.exe vagy -R, a teljes szerelvény aláírását és kiszámítja az összes hash értékeket.

Kapcsolódó cikkek