Téma .NET Assemblies je obvykle pro začínajícího vývojáře těžký oříšek. Proto si v tomto článku popíšeme co to v .NETu assembly vůbec znamená a jaké jsou rozdíly v jednotlivých druzích.
Co to je assembly?
Assembly (česky sestavení) je balíček obsahujíc metody, pole, vlastnosti, interfacy, obrázky a mnoho dalšího. Všechny tyto entity existují v assembly v IL (Intermediate Language) formátu a jsou zkonvertovány do strojového kódu až za běhu pomocí CLR (Common Language Runtime). Assembly může existovat ve dvou podobách:
- Portable Executable - EXE soubor
- Dynamic Link Library - DLL soubor
Pojďme si teď uvést jednoduchý příklad, kde by se dala assembly použít. Předpokládejme, že napíšeme projekt, ve kterém máme pár metod pro aritmetické výpočty, které potřebujeme do naší aplikace. Ve výsledku pak získáme buď EXE nebo DLL soubor. To znamená, že jsme vytvořili dále použitelnou assembly, která má za účel řešit aritmetické výpočty.
Druhy Assemblies:
Máme dva druhy assemblies:
- Weakly Named Assemblies (slabý název - nepodepsané)
- Strongly Named Assemblies (silný název - podepsané)
Oba druhy jsou prakticky identické. Jediný rozdíl je v tom, že Strongly Named Assemblies jsou podepsané párem veřejného a privátního klíče vydavatele. Podepisování z ní udělá unikátní, zabezpečenou a verzovanou assembly. Dále si v tomto článku také ukážeme jak si můžeme podepsat vlastní assembly a jak jí uložit do GAC (Global Assembly Cache).
Pamatujte, že do GAC databáze jdou umístit jen Strongly Named Assemblies.
Nasazení Assemblies:
Nasazení můžeme provést dvěma různými způsoby, jmenovitě privátně a globálně. První způsob znamená, že assembly nahrajete do adresáře bin v aplikační složce. Globální nasazení spočívá v umístění do GAC (Global Assembly Cache). GAC obsahuje všechny assembly, které jsou s .NET dodávány. Ostatně se o tom můžete přesvědčit samy nakouknutím do složky c:\Windows\assembly. Jak už jsem psal v minulém odstavci, do GAC nelze vložit Weakly Named Assembly. Podívejte co se stane, když se o to pokusíme:
Zpráva, která v překladu znamená "Chyba při přidávání assembly do úložny: Pokus o instalaci assembly, co nemá silné jméno." nám dává jasně na jevo, že není možné do GAC přidat weakly named assembly.
Vytváření podepsané assembly:
Abychom mohli přidat do GAC naší assembly, musíme jí podepsat. Pojďme se podívat, jak na to. První co musíme udělat je vytvořit tzv. Strong Name. To můžeme udělat pomocí nástroje SN.exe (.NET Framework Strong Name Utility). Proto zapište toto do příkazového řádku Visual Studia (naleznete ho v nabídce start):
SN.exe -k MujProjekt.keys
Tak vytvoříme soubor MujProjekt.keys obsahující privátní a veřejný klíč. V případě, že chcete vidět veřejný klíč, nechejte si ho vyextrahovat do zvláštního souboru příkazem:
SN.exe -p MujProjekt.keys MujProjekt.PublicKey
A teď zapište do okna příkazové řádky pro zobrazení veřejného klíče toto:
Tímto způsobem pomocí SN.exe ale nemůžete zobrazovat privátní klíč. Teď, pro podepsání assembly naším vygenerovaným klíčem použijte:
vbc /keyfile:MujProjekt.keys Program.vb
Nebo pro C#:
csc /keyfile:MujProjekt.keys Program.cs
Přidání assembly se silným jménem do GAC
Teď je čas přidat naší assembly se silným jménem do Global Assembly Cache. Jednoduše spusťte GACUtil.exe:
GACUtil.exe -i Program.exe
Pokud se nyní podíváte do C:\Windows\Assembly zjistíte, že je zde i ta naše (Program.exe). Od této chvíle můžete používat assembly ve všech dalších projektech.
Závěrem
V tomto článku jsme si vysvětlili jen základy .NET assemblies. Je tu ale mnohem víc věcí, které je možné s nimi dělat. Například verzování, bezpečnost atp. A není na škodu používat nástroj ILDasm.exe, který zobrazí IL z assembly. Tímto způsobem si získáte lepší představu o tom, co se pod pokličkou .NETu vlastně děje.
Dodatek překladatele - podepisování ve Visual Studiu
I když to není účelem článku, myslím, že teď, když už máme představu o tom jak celé podepisování funguje, tak nebude na škodu si představit i "pohodlnější" cestu. Pokud ve Visual Studiu klepnete pravým tlačítkem na projekt, vyberete vlasnosti a zvolíte kartu "Signing", objeví se zaškrtávátko Sign the assembly. To nám otevře možnost zvolit podpisový klíč a nebo případně vytvořit nový. Po vykompilování bude naše assembly Strongly named a tedy i připravená pro přidání do GAC.
Toto je překlad článku z GridViewGuy.com od Mohammadama Azama, který mi ochotně dovolil jeho článek přepsat do naší mateřštiny.