Showing posts with label assembly. Show all posts
Showing posts with label assembly. Show all posts

Tuesday, March 22, 2016

Manifest, GAC i Refleksija


Pre nego što pređemo na Manifest, podsetio bi vas da dobro prostudirate dva prethodna posta Arhitektura Microsoft .NET Framework-a i Šta su sklopovi? Koje sve komponente sadrži .Net Framework i koji je proces kompajliranja i izvršavanja aplikacija programiranih u .Net programskim jezicima je toliko bitno znati, da ćemo prvo u najkraćim crtama ponoviti materiju koja se mora znati. Znači, Microsoft .Net Framework je platforma koja omogućava razvoj i izvršavanje .Net aplikacija. To je platforma koje obezbeđuje komponentnu infrastrukturu, integraciju programskih jezika, internet interoperabilnost, jednostavan razvoj, jednostavnu instalaciju, pouzdanost i bezbednost. CLR – Common Language Runtime je najvažniji deo Microsoft .Net Framework-a nadležan za aktiviranje objekata, izvršavanje bezbednosnih provera nad njima, njihovo smeštanje u memoriju, izvršavanje i uklanjanje iz memorije. CLR podržava sve programske jezike koje se mogu prevesti u MSIL – Microsoft Intermediate Language. 
 

( Sklop u jednom i sklop u više fajlova )

Sledeće komponente Microsoft .Net Framework-a su BCL – Base Class Library, biblioteka baznih klasa koja se sastoji se od klasa, interfejsa i tipova podataka koje omogućavaju korišćenje funkcija sistema i FCL – Framework Class Library koja sadrži specijalizovane biblioteke tipova podataka koje sadrže Data i XML klase. Microsoft .Net Framework sadrži i klase koje omogućavaju tehnologije za razvoj aplikacija poput konzolni aplikacija, formi, WPF aplikacija, univerzalni aplikacija, mobilni aplikacija, web servisa, web aplikacija itd. Proces prevođenja izvornog koda u izvršni u najkraćim crtama se može podeliti u dva koraka. Prvo se izvorni kod prevodi u MSIL – Microsoft Intermediate Language, zatim u mašinski kod. MSIL je jezik nižeg nivoa koji se lako pretvara u mašinski kod. On omogućuje platformsku nezavisnost, poboljšanje performansi i jezičku interoperabilnost. Jednostavno klasa koja je napisana u jednom programskom jeziku može da komunicira sa klasom pisanom u drugom programskom jeziku. CTS – Common Type System – zajednički sistem tipova definiše skup pravila koje .Net kompajleri moraju da poštuju. CTS tipovi imaju istu semantiku bez obzira u kom su programskom jeziku definisani. I naravno ne treba izostaviti ni GC – Garbidge Collection – skupljač smeća, komponentu za upravljanje memorijom. GC jedino radi sa referentnim tipovima podataka, što znači da objekte na hipu do kojih ne vodi ni jedna referenca se automatski oslobađa. GC sprečava curenje memorije, tačno vreme oslobađanja memorije nije određeno i oslobađanje resursa ne treba da se radi u destruktoru klase.

Gde se sad u sve navedeno uklapa sklop? 
 

Wednesday, March 16, 2016

Šta su sklopovi?


Još pre pojave .Net platforme, rad sa *.dll datotekama koje izvoze globalne funkcije i *.dll datoteke koje izvoze COM klase, su pravile ogromne probleme, da je Microsoft sa pravom uveo frazu „DLL pakao“ za navedenu problematiku. Aplikacije nisu radile ispravno jer bi novo instalirana aplikacija prebrisala *.dll datoteku koju je koristila druga aplikacija. Ponekad bi instalacija nove aplikacije zamenila novi *.dll starijom verzijom ili novi *.dll datoteka nije bila kompatibilna sa starijom verzijom. Tek od Windows 2000 se uvela mogućnost instaliranja *.dll datoteka u direktorijum aplikacije. Najveći problem je bio što konfiguracija COM komponente nije bila smeštena u samoj *.dll komponenti, nego u bazi Windows Registry. Za ovaj pakao, kao odgovor je stigao sklop.


( GAC - Global Assembly Cashe Folder )

Sklop je osnovna jedinica aplikacije .Net-a. Sklop je samoopisujuća kolekcija koda, resursa i meta podataka. Jednostavno govoreći, sklop je projekat koji se kompajlira u izvršnu datoteku *.exe ili u *.dll datoteku biblioteke. Sklopovi mogu biti privatni ili javni tj. deljeni. Sklop koji se nalazi u direktorijumu vaše aplikacije je privatan sklop, dok deljeni sklop je sklop smešteni u GAC - Global Assembly Cache pomoću alata Gacutil.exe ili Windows Installer-a. To su sklopovi smešteni u C:\Windows\Microsoft.NET\assembly\GAC_MSIL folderu. Deljene sklopove ili sklopove koje se nalaze u GAC-u može da koristi više aplikacija, dok privatni sklop može da koristi samo aplikacija koja sadrži sklop u svom direktorijumu. Da bi ste kreirali deljeni sklop neophodno je da vašem sklopu dodelite Strong name – strogo ime.

var assembly = Assembly.GetExecutingAssembly();
WriteLine(assembly.FullName);
// Result: AssemblyCS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

Kao što vidite strogo ime se sastoji od imena sklopa, verzije, kulture i parnog ključa. Navedena aplikacija u kodu AssemblyCS nema dodeljeno strogo ime, što definitivno ukazuje da je reč o privatnom sklopu. Najvažnija stvar za jedan sklop je deklaracija sklopa koja sadrži informacije o tome od čega se sastoji sklop. Sklop može da sadrži samo jednu deklaraciju sklopa i ona sadrži sve podatke opisa za sklop. Deklaracija sklopa može da se nalazi u svojoj odvojenoj datoteci ili da se nalazi unutar jednog od modula sklopa.

Šta sadrži sklop?