Microsoft .NET Framework este o componentă cheie a Microsoft .NET și oferă o platformă pentru crearea, implementarea și performanța Web-servicii și aplicații. Acesta oferă o înaltă performanță de mediu în mai multe limbi bazate pe standarde, în care să efectueze diverse tipuri de aplicații și servicii.
În acest și următoarele părți ale acestui articol, vom explora cu Microsoft .NET Framework, cu principalele sale componente - Runtime Common Language (CLR), precum și o bibliotecă de clasă ASP.NET, ia în considerare în scopul fiecăreia dintre ele, arhitectura, componente, și să dea exemple de utilizare a acestora .
Principalele componente Microsoft .NET Framework este prezentată în diagrama (fig. 1)
Componenta Common Language Runtime, discutată în detaliu în acest articol sunt situate deasupra serviciile de sistem de operare, care în prezent este un sistem de operare Windows, dar în viitor, astfel poate fi practic orice platformă software. Scopul principal al CLR - cerere de performanță, conformitatea cu toate dependențele de software, managementul memoriei, securitatea, integrarea cu limbaje de programare, etc. Runtime oferă o varietate de servicii care facilitează crearea și punerea în aplicare a aplicațiilor, și îmbunătățește semnificativ fiabilitatea acestuia.
Dezvoltatorii nu interacționează cu Common Language Runtime direct - toate serviciile furnizate de o bibliotecă de clasă unificată, care este situat pe CLR. Această bibliotecă conține mai mult de 1.000 de clase pentru o varietate de sarcini de programare - de la interactiunea cu serviciile de sistem de operare pentru a lucra cu date și XML-documente.
O parte din această bibliotecă de clasă este un model de programare pentru crearea de aplicatii bazate pe web, numit ASP.NET. Acesta conține clase de modele, componente și servicii care facilitează crearea de Web-servicii și aplicații. Rețineți că puteți crea alte tipuri de aplicații, în plus față de Web-servicii și aplicații bazate pe Web utilizând Microsoft .NET Framework - aplicatii consola bazate pe Windows Forms aplicații și servicii bazate pe Windows. Dar, din moment ce obiectivul principal al Microsoft .NET Framework este de a sprijini crearea de aplicatii bazate pe web, componenta ASP.NET joacă rolul cel mai important în arhitectura Microsoft .NET Framework.
La cel mai scăzut nivel de diagrama noastre (vezi. Fig. 1) sunt situate serviciile sistemului de operare. Servicii de platforma Windows oferă suport pentru tehnologii precum COM +, precum și de gestionare a tranzacțiilor, cozile de mesaje, etc.
Odată ce ne-am acoperit componentele de bază ale Microsoft .NET Framework, trece la un studiu mai detaliat cele mai importante dintre ele - Common Language Runtime.
Componenta Common Language Runtime
Common Language Runtime oferă o serie de aplicații NET-rulare. Printre caracteristicile oferite de acest mediu ar trebui remarcat de manipulare excepție, securitate, versiuni de suport de depanare. Toate aceste caracteristici sunt disponibile de la orice limbaj de programare corespunzătoare specificație comună Specificații Limba. Microsoft oferă trei limbaje de programare care pot fi utilizate CRJ, - Visual Basic .NET, Visual C # .NET și Visual C ++ cu extensii de gestionat. În plus, un număr de părți terțe care lucrează pe versiunile de limbi-programare .NET, cum ar fi Perl, Python și COBOL.
- pentru detectarea clase;
- încărcare de clasă;
- codul pentru o anumită platformă de generare;
- de securitate.
Runtime monitorizează, de asemenea, durata de viață a obiectelor. COM / COM + au fost folosite pentru acest scop contoare speciale (contor de referință); contoare sunt, de asemenea, folosite pentru a CRJ și eliminarea obiectelor din memorie are loc printr-un proces numit de colectare a gunoiului (colectarea gunoiului).
Common Language Runtime stabilește, de asemenea, sistem de tip comun utilizat de toate limbajele de programare. Acest lucru înseamnă, de exemplu, că toate limbajele de programare se va ocupa de date întregi sau date în virgulă mobilă într-un format comun și o lungime comună, și reprezentarea liniilor va fi, de asemenea, aceeași pentru toate limbajele de programare. Datorită sistemului de tip unificat realizează o simpla integrare a componentelor și cod scrise în diferite limbaje de programare. Spre deosebire de COM-tehnologie, de asemenea, pe baza unui set de tipuri standard, dar reprezentat în formă binară, CLR vă permite să integreze codul (care pot fi scrise în diferite limbaje de programare) în modul de proiectare, dar nu în modul de execuție.
După compilare cod gestionat conține metadate care descriu componenta în sine, precum și componentele utilizate pentru generarea codului. runtime verifică dacă toate resursele necesare sunt disponibile. Utilizarea metadatelor elimină necesitatea de a stoca informații despre componentele din registru. Prin urmare, atunci când se deplasează o componentă la un alt computer nu mai trebuie să se înregistreze componenta (cu excepția ansamblului global - ansamblul de la nivel mondial, care va fi discutat mai jos), și îndepărtarea componentei este la fel de simplu ca și demontarea ansamblului care îl conține.
După cum se poate observa din descrierea de mai sus funcțională a Common Language Runtime, rulare oferă o serie de avantaje care facilitează crearea, executarea și punerea în aplicare a .NET-aplicații.
fișiere executabile și metadate
Acum, o privire mai atentă la conceptul de metadate. Pentru început, se va crea un program primitiv pe VB.NET. Acest program de consolă afișează șirul „Running sub .NET“ la iesirea standard si completeaza executarea acestuia. Codul pentru acest program este după cum urmează:
Directiva Importurile indică faptul că folosim clasele implementate în spațiul de nume de sistem. Una dintre aceste clase este clasa Console. Metoda WriteLine a acestei clase, vom folosi pentru afișarea liniei. Noi compila acest program (Figura 2) Utilizarea VB.NET compilator de lot:
După compilare vom obține un CONS.EXE fișier executabil, care este un fișier în format SOFF / PE cu secțiuni suplimentare care conțin informațiile necesare pentru a Common Language Runtime. Putem verifica acest lucru prin executarea DUMPBIN:
Listarea 1 prezintă fragmentul haldei fișier executabil (prezentat numai componentele).
Dump fișierul executabil pentru NET începe cu antetele obișnuite pentru MS-DOS și COFF-antet, standard pentru toate programele bazate pe Windows. În continuare, vom vedea că programul nostru - un program de 32 de biți, Windows (PE32). Secțiunea de date # 1 sunt aranjate CLR-antet și date. Rețineți că această secțiune are atribute cod și Executare Citire, arătând spre încărcător, care conține o secțiune de cod care este executat de runtime.
După ce examinăm conținutul unui fișier executabil, consultați secțiunea acestuia în cazul în care codul și metadatele sunt plasate.
Cu ajutorul ILDASM poate salva un fișier text executabil benă nostru. Ca rezultat, vom obține o descriere mai detaliată a titlului, deja discutat mai sus, precum și informații suplimentare utilizate de CLR. Listarea 2 arată o porțiune a secțiunii haldei care conține, pe care vom descrie mai jos.
După cum se vede din pista de haldei, ea conține toate informațiile necesare cu privire la programul nostru. Prima instrucțiuni în limba IL (.assembly) conține o referire la un ansamblu extern - mscorlib. Declarația următoare conține, de asemenea, o referire la un ansamblu extern. Acesta este un set de clase pentru a sprijini programe în Visual Basic, Microsoft a implementat în ansamblul, - Microsoft.VisualBasic. Următorul este declarația care descrie programul nostru (într-un ansamblu) și codul actual. Rețineți că programul nostru este atribuit un identificator unic la nivel mondial (GUID).
Vă rugăm să rețineți că clasa noastră este o subclasă de Contra System.Object - baza de clasa .NET Framework clasa biblioteca. După cum se poate observa din codul programului nostru, nu am specificat această moștenire în mod direct - acest fapt este adăugat automat de compilator. Clasa are două metode. Metoda principală () este o metodă statică, care este implementat în codul programului nostru. A doua metodă - ctor () constructor este adăugat automat de compilator. Designer permite altor aplicații pentru a crea instanțe ale aplicației.
Microsoft Intermediate Language
În groapa de gunoi de mai sus a omis în mod deliberat o parte importantă - codul de pe limba IL. Când ne-am compila codul nostru, rezultatul acestui proces nu este codul într-un limbaj ușor de înțeles pentru o platformă specifică și codul într-un limbaj intermediar numit Microsoft Intermediate Language (MSIL), care este un set de instrucțiuni care nu sunt dependente de un procesor specifice. Mai jos este un IL-cod de metoda noastră principală ():
Dacă omiteți prolog, codul nostru este de 8 stiva de celule este format din 3 instrucțiuni. Prima declarație - ldstr - încarcă un șir de caractere pe stivă. instrucțiune de apel numește această metodă de asamblare și trece un parametru. Executarea se termină instrucțiuni ret. În ciuda faptului că limba IL este destul de simplu pentru a scrie programe în ea nu prea are sens, dar înțelegerea comună a instrucțiunilor poate ajuta să înțelegeți logica programului, precum și nucleul .NET Framework. (Informații suplimentare pot fi obținute din specificațiile infrastructurii Common Language, partiție 3. CIL set de instrucțiuni, disponibile pe site-ul Microsoft.)
Just-In-Time Compiler
Programul în limba IL rămâne neschimbată, atâta timp cât nu apel la performanța fișierului în care este stocat. La un moment în care controlul este transferat în mediul de execuție, IL-cod este convertit într-un cod pentru o anumită platformă. Această sarcină este efectuată de compilator, numit Just-In-Time Compiler (JIT). Teoretic, doar o componentă a respectivului compilator .NET, în funcție de platforma specială. Dar, de fapt, platforma este, de asemenea, dependentă și o parte semnificativă a bibliotecii de clasă, precum și o serie de alte componente, de exemplu, următoarele componente ale platformei .NET:
- mscorlib
- sistem
- System.Design
- System.Drawing
- System.Windows.Forms
Cu toate acestea, există o posibilitate reală de NET pentru non-Windows-platforme, și, eventual, în viitorul apropiat vom vedea implementarea .NET pentru Linux.
Tu ar trebui să acorde, de asemenea, atenția asupra faptului că de la NET-programe pot apela direct funcțiile Windows API. În acest caz, programul nostru va fi legat de o anumită platformă și le transferă, fără a schimba codul nu va fi posibilă.
Interesant, JIT-compilator nu efectuează compilare a întregii IL-cod prima dată când un program. În schimb, fiecare metodă este compilat la prima referire la ea, și, astfel, codul neutilizat nu compilează. Codul compilat este stocat în memorie, și apelurile ulterioare pentru a realiza programul este deja compilat cod. Microsoft oferă un compilator special CRJ Image Generator nativ (NGEN), care compilează întregul IL-cod și îl stochează pe disc (Figura 4.):
Fig. 5 prezintă explicarea ciclului de aplicații care rulează .NET:
Când povestea Common Language Runtime, am folosit în mod repetat termenul „asamblare» (asamblare). Asamblare este o colecție de unul sau mai multe fișiere. Aceste fișiere conțin de multe ori de cod, dar pot include, de asemenea, grafice și imagini și resurse, precum și alte date binare asociate cu codul din ansamblul. Astfel de ansambluri sunt numite ansambluri statice, deoarece acestea sunt stocate pe disc. ansambluri dinamice sunt create în timpul executării programului și discul nu persistă de obicei.
Fig. 6 prezintă ansamblul format din unul sau mai multe fișiere:
După cum se vede din desen, manifestul conține următoarele informații despre ansamblul:
- Numele ansamblului;
- versiune;
- fișiere în această adunare;
- de asamblare utilizată de această adunare.
În plus față de câmpurile standard în domeniile suplimentare evidente programatorilor date pot fi prezente.
Utilizarea ansamblurilor și numerele de versiune poate rezolva problema de compatibilitate între diferitele versiuni ale DLL, cunoscut sub numele de DLL Hell. Acum, programul NET-asamblare caută în directorul local, care vă permite să executați simultan mai multe versiuni ale aceluiași ansamblu fără probleme. (Informații suplimentare pot fi obținute prin citirea descrierii de infrastructură Limbă comună, partiția 2. Metadate Definiție și Semantica, disponibile pe site-ul Microsoft.)
Adunarea Cache Global
În secțiunea următoare ne vom uita la ultima componentă a Common Language Runtime - Tip Sistem Comun. (Pentru mai multe informații despre Common Language Runtime este disponibil în caietul de sarcini de infrastructură Common Language, partiție 1. Concepte și arhitectură la Web-site-ul Microsoft.)