.NET Framework (pronuntat ca „dot net”) este un cadru software proprietar dezvoltat de Microsoft care ruleaza in principal pe Microsoft Windows. A constituit implementarea predominanta a Common Language Infrastructure (CLI) pana cand a fost inlocuita de proiectul multiplatform .NET. Include o biblioteca mare de clase numita Framework Class Library (FCL) si ofera interoperabilitate in limbaj (fiecare limba poate folosi cod scris in alte limbi) in mai multe limbaje de programare.
Programele scrise pentru .NET Framework se executa intr-un mediu software (spre deosebire de un mediu hardware) numit Common Language Runtime (CLR). CLR este o masina virtuala de aplicatie care ofera servicii precum securitatea, gestionarea memoriei si gestionarea exceptiilor. Ca atare, codul computerului scris folosind .NET Framework se numeste „cod gestionat”. FCL si CLR impreuna constituie .NET Framework.
FCL ofera interfata utilizator, acces la date, conectivitate la baze de date, criptografie, dezvoltare de aplicatii web, algoritmi numerici si comunicatii in retea. Programatorii produc software combinand codul sursa cu .NET Framework si alte biblioteci. Cadrul este destinat sa fie utilizat de majoritatea aplicatiilor noi create pentru platforma Windows. Microsoft produce, de asemenea, un mediu de dezvoltare integrat pentru software-ul .NET numit Visual Studio.
.NET Framework a inceput ca software proprietar, desi firma a lucrat pentru a standardiza stiva de software aproape imediat, chiar inainte de prima sa lansare. In ciuda eforturilor de standardizare, dezvoltatorii, in special cei din comunitatile de software liber si open-source, si-au exprimat nelinistea fata de termenii selectati si perspectivele oricarei implementari gratuite si open-source, in special in ceea ce priveste brevetele de software.
De atunci, Microsoft a schimbat dezvoltarea .NET pentru a urma mai indeaproape un model contemporan al unui proiect software dezvoltat de comunitate, inclusiv prin emiterea unei actualizari a brevetului sau care promite sa rezolve unele probleme.
In Aprilie 2019, Microsoft a lansat .NET Framework 4.8, ultima versiune a cadrului ca oferta proprietara. De atunci, au fost lansate doar remedieri lunare ale erorilor de securitate si fiabilitate ale acelei versiuni. Nu sunt planificate alte modificari ale acestei versiuni.
Arhitectura – Infrastructura limbajului comun
Common Language Infrastructure (CLI) ofera o platforma neutra din punct de vedere al limbajului pentru dezvoltarea si executia aplicatiilor. Prin implementarea aspectelor de baza ale .NET Framework in domeniul CLI, aceste functii nu vor fi legate de o singura limba, ci vor fi disponibile in numeroasele limbi acceptate de cadru.
Common Language Runtime
.NET Framework include Common Language Runtime (CLR). Acesta serveste ca motor de executie al .NET Framework si ofera multe servicii precum managementul memoriei, siguranta tipurilor, gestionarea exceptiilor, colectarea gunoiului, securitatea si managementul firelor. Toate programele scrise pentru .NET Framework sunt executate de CLR.
Programele scrise pentru .NET Framework sunt compilate in codul Common Intermediate Language (CIL), spre deosebire de a fi compilate direct in codul masinii. In timpul executiei, un compilator just-in-time (JIT) specific arhitecturii, transforma codul CIL in cod masina.
Assembly
Codul CIL compilat este stocat in ansambluri CLI. Dupa cum este impus de specificatie, ansamblurile sunt stocate in format de fisier Portable Executable (PE), comun pe platforma Windows pentru toate bibliotecile cu linkuri dinamice (DLL) si fisierele EXE executabile. Fiecare ansamblu este format din unul sau mai multe fisiere, dintre care unul trebuie sa contina un manifest care sa poarte metadatele ansamblului.
Numele complet al unui ansamblu (a nu se confunda cu numele fisierului de pe disc) contine numele sau simplu text, numarul versiunii si simbolul cheii publice. Ansamblurile sunt considerate echivalente daca au acelasi nume complet.
O cheie privata poate fi folosita si de catre creatorul ansamblului. Indicatorul cheii publice identifica cu ce cheie privata este semnat un ansamblu. Numai creatorul perechii de chei (de obicei persoana care semneaza ansamblul) poate semna ansambluri care au acelasi nume, ca un ansamblu de versiune anterioara, deoarece creatorul detine cheia privata.
Incepand cu Visual Studio 2015, tehnologia de compilare .NET Native permite compilarea codului .NET al aplicatiilor Universal Windows Platform direct in codul masinii, mai degraba decat codul CIL, dar aplicatia trebuie sa fie scrisa fie in C#, fie in Visual Basic.NET.
Biblioteca de clase
.NET Framework include o implementare a bibliotecilor standard de baza CLI. Biblioteca de clase .NET Framework (FCL) este organizata intr-o ierarhie de spatii de nume. Majoritatea interfetelor de programare a aplicatiilor (API) incorporate fac parte fie din spatiile de nume System.* sau Microsoft.*.
Aceste biblioteci de clasa implementeaza multe functii comune, cum ar fi citirea si scrierea fisierelor, randarea grafica, interactiunea cu bazele de date si manipularea documentelor XML. Bibliotecile de clase sunt disponibile pentru toate limbile compatibile CLI. FCL implementeaza CLI Base Class Library (BCL) si alte biblioteci de clasa – unele sunt specificate de CLI, iar altele sunt specifice Microsoft.
BCL include un mic subset din intreaga biblioteca de clase si este setul de baza de clase care servesc ca API de baza pentru CLR. Pentru .NET Framework, majoritatea claselor considerate ca fac parte din BCL rezida in mscorlib.dll, System.dll si System.Core.dll. Clasele BCL sunt disponibile in .NET Framework, precum si in implementarile sale alternative, inclusiv .NET Compact Framework, Microsoft Silverlight, .NET Core si Mono.
FCL se refera la intreaga biblioteca de clasa livrata cu .NET Framework. Include un set extins de biblioteci, inclusiv BCL, Windows Forms, ASP.NET si Windows Presentation Foundation (WPF), dar si extensii la bibliotecile de clasa de baza ADO.NET, Language Integrated Query (LINQ), Windows Communication Foundation (WCF) si Workflow Foundation (WF). FCL are un domeniu de aplicare mult mai mare decat bibliotecile standard pentru limbaje precum C++ si este comparabil ca scop cu bibliotecile standard din Java.
O data cu introducerea implementarilor alternative (de exemplu, Silverlight), Microsoft a introdus conceptul de biblioteci portabile de clasa (PCL), permitand unei biblioteci consumatoare sa ruleze pe mai multe platforme. O data cu proliferarea in continuare a platformelor .NET, abordarea PCL nu a reusit sa se extinda (PCL-urile sunt intersectii definite ale suprafetei API intre doua sau mai multe platforme). Ca urmator pas evolutiv al PCL, biblioteca standard .NET a fost creata retroactiv pe baza API-urilor bazate pe System.Runtime.dll, gasite in UWP si Silverlight.
Noile platforme .NET sunt incurajate sa implementeze o versiune a bibliotecii standard care sa le permita sa refoloseasca bibliotecile terte existente pentru a rula fara noi versiuni ale acestora. Biblioteca standard .NET permite o evolutie independenta a bibliotecii si a straturilor de model de aplicatie in cadrul arhitecturii .NET.
NuGet este managerul de pachete pentru toate platformele .NET. Este folosit pentru a prelua biblioteci terte intr-un proiect .NET cu un flux global de biblioteca la NuGet.org. Fluxurile private pot fi mentinute separat, de exemplu, de catre un server de compilare sau un director de sistem de fisiere.
Performanta
Cand o aplicatie este lansata pentru prima data, .NET Framework compileaza codul CIL in cod executabil folosind compilatorul sau just-in-time si memoreaza in cache programul executabil in .NET Native Image Cache. Datorita memoriei cache, aplicatia se lanseaza mai rapid pentru lansarile ulterioare, desi prima lansare este de obicei mai lenta. Pentru a accelera prima lansare, dezvoltatorii pot folosi utilitarul Native Image Generator pentru a compila manual si in cache orice aplicatie .NET in avans.
Colectorul de gunoi, care este integrat in mediu, poate introduce intarzieri neprevazute de executie asupra carora dezvoltatorul are putin control direct. „In aplicatiile mari, numarul de obiecte cu care colectorul de gunoi trebuie sa lucreze poate deveni foarte mare, ceea ce inseamna ca poate dura foarte mult timp pentru a le vizita si rearanja pe toate.”
.NET Framework ofera suport pentru apelarea extensiilor SIMD Streaming (SSE) prin cod gestionat din Aprilie 2014 in Visual Studio 2013 Update 2. Cu toate acestea, Mono a oferit suport pentru extensiile SIMD incepand cu versiunea 2.2 in spatiul de nume Mono.Simd in 2009. Dezvoltatorul principal al Mono, Miguel de Icaza, si-a exprimat speranta ca acest suport SIMD va fi adoptat de standardul ECMA al CLR.
Extensiile SIMD de streaming au fost disponibile in procesoarele x86 de la introducerea Pentium III. Unele alte arhitecturi, cum ar fi ARM si MIPS, au, de asemenea, extensii SIMD. In cazul in care procesorul nu are suport pentru aceste extensii, instructiunile sunt simulate in software.
Implementari alternative
.NET Framework a fost implementarea predominanta a tehnologiilor .NET, pana la lansarea lui .NET. Exista si alte implementari pentru parti ale cadrului. Desi motorul de rulare este descris de o specificatie ECMA-ISO, alte implementari ale acestuia pot fi grevate de probleme de brevet; Standardele ISO pot include declinarea raspunderii, „Se atrage atentia asupra posibilitatii ca unele dintre elementele acestui document sa faca obiectul drepturilor de brevet.
ISO nu va fi responsabil pentru identificarea unora sau a tuturor acestor drepturi de brevet.” De asemenea, parti ale FCL au functii si comportament specifice Windows, astfel incat implementarea pe platforme non-Windows poate fi problematica.
Cateva implementari alternative ale unor parti ale cadrului sunt enumerate aici.
- .NET Micro Framework este o platforma .NET pentru dispozitive extrem de limitate de resurse. Include o versiune mica de CLR si accepta dezvoltarea in C# (desi unii dezvoltatori au putut sa foloseasca VB.NET, dar cu functionalitati limitate) si depanare (intr-un emulator sau pe hardware), ambele folosind Microsoft Visual Studio. Include, de asemenea, un subset de biblioteca de clasa .NET Framework (aproximativ 70 de clase cu aproximativ 420 de metode), un cadru GUI bazat liber pe WPF si biblioteci suplimentare specifice aplicatiilor incorporate.
- Mono este o implementare a CLI si FCL si ofera functii suplimentare. Este licentiat ca software gratuit sub licenta MIT. Include suport pentru bibliotecile ASP.NET, ADO.NET si Windows Forms pentru o gama larga de arhitecturi si sisteme de operare. Include, de asemenea, compilatoare C# si VB.NET.
- Portable.NET (parte a DotGNU) ofera o implementare a CLI, parti din FCL si un compilator C#. Accepta o varietate de procesoare si sisteme de operare. Proiectul a fost intrerupt, ultima lansare stabila fiind in 2009.
- Microsoft Shared Source Common Language Infrastructure este o implementare non-libera a CLR. Cu toate acestea, ultima versiune ruleaza doar pe Windows XP SP2 si nu a fost actualizata din 2006. Astfel, nu contine toate caracteristicile versiunii 2.0 a .NET Framework.
- CrossNet este o implementare a CLI si parti ale FCL. Este un software gratuit care foloseste o licenta MIT open source.