Presmerovanie verzie assembly

Publikoval Michal Kočí dňa 9.10.2006 o 00:59 v kategórii .Net

Ak sa aplikácia odkazuje na silne podpísanú assembly, je táto najskôr vyhľadaná v GAC (Global Asembly Cache) a ak sa v nej nenájde, je vyhľadaná v aplikačnom adresári aplikácie. V GAC sa hľadá presne tá verzia assembly, s ktorou bola aplikácia skompilovaná, teda nemôže nastať stav, kedy by aplikácia bola spustená s nesprávnou verziou assembly - to by mohlo spôsobiť nefunkčnosť, alebo chybnú funkčnosť aplikácie. Môže nastať stav, že v systéme sa nachádza mierne odlišná verzia assembly (napríklad novšia), ktorá ponúka potrebnú funkcionalitu, ale nenachádza sa v ňom tá verzia, ktorá je aplikáciou používaná. Aplikácia sa bez zásahu administrátora nespustí. Vo Frameworku je to však riešiteľné. Administrátor má dve možnosti presmerovania verzie assembly: pre všetky aplikácie používajúce danú assembly, alebo len pre konkrétnu aplikáciu.

Zmenou publikačnej politiky (Publisher policy) je možné nastaviť presmerovanie z jednej verzie na inú pre všetky aplikácie nainštalované v systéme. Táto zmena sa nastavuje v globálnom konfiguračnom súbore .Net Frameworku (machine.config), ktorý udržiava administratívne nastavenie pre celý počítač. Tento konfiguračný súbor je XML súbor, teda v princípe je možné ho meniť v ľubovoľnom textovom editore podporujúcom prácu s XML súbormi (teda v textovom editore, ktorý nepridáva do súboru formátovacie znaky). To, že to je možné ale neznamená, že je to vhodné, nakoľko v prípade narušenia konzistencie tohto súboru by mohlo dôjsť k znefunkčneniu celého Frameworku.

Namiesto jeho priamej editácie je možné použiť .Net Configuration nainštalovaný priamo s Frameworkom do administratívnych nástrojov systému Windows. V tomto programe sa presmerovanie konfiguruje v časti Configured Assemblies, vo vlastnostiach kompletu. Na záložke Binding Policy sa nastaví pre akú požadovanú verziu (alebo rozsah verzií) príde k presmerovaniu na akú verziu. Môže sa tu napríklad nastaviť, že pri požiadavke na použitie verzie 2.0.0.0 (Requested Version) sa požiadavka presmeruje a aplikácia bude používať verziu 2.0.1.0 (New Version). Tento príklad je demonštrovaný na nasledovnom obrázku.

Nastavenie presmerovania verzie assembly je možné nie len pre všetky aplikácie naraz, ale aj jednotlivo pre konkrétnu aplikáciu. Toto sa nastavuje v konfiguračnom súbore aplikácie. Konfiguračný súbor aplikácie má rovnaký názov ako aplikácia (vrátane prípony), je však navyše obohatený o príponu .config. Ak sa napríklad spustiteľný súbor aplikácie volá Aplikacia.exe, potom sa jej konfiguračný súbor nazýva Aplikacia.exe.config. Opäť sa jedná o XML súbor, avšak v tomto prípade treba jeho konfiguráciu vykonať ručne pomocou textového editora, keďže súčasťou .Net Frameworku nie je žiaden nástroj, ktorý by umožňoval konfiguráciu .Net aplikácie. Ako textový editor je možné použiť aj editor XML súborov vstavaný vo Visual Studiu.Net.

V konfiguračnom súbore sa nastavujú identické informácie ako pri konfigurácii pomocou .Net Configuration – ktorej assembly sa presmerovanie týka. Nastavenie presmerovania assembly na úrovni jednej aplikácie by mohla vyzerať nasledovne:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <publisherPolicy apply="no" />
      <dependentAssembly>
        <assemblyIdentity 
          name="InformacneOkno"    
          publicKeyToken="134c9e62036fb71d" />
        <publisherPolicy apply="no" />
        <bindingRedirect 
          oldVersion="2.0.0.0" 
          newVersion="2.0.1.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

Takéto presmerovanie nie je možné v prípade obyčajných Win32 aplikácií, čo poukazuje na silu .Net Frameworku.

Mohlo by ťa tiež zaujímať

Páčil sa ti príspevok?

Zdieľaj príspevok alebo si ho odlož na neskôr

Sleduj ma

Ak nechceš premeškať príspevky ako je tento, sleduj ma na Twitteri, alebo ak máš RSS čítačku, môžeš sledovať môj RSS kanál.

Komentáre

K tomuto článku nie su pridané žiadne komentáre.

Pridať komentár

Máš niečo zaujímavé povedať k článku? Pridaj to k článku ako komentár. Spam, reklamu alebo inak nerelevantné komentáre okamžite mažem.