Pachete, meta-pachete și platforme, microsoft docs

În acest articol

NET Core este o platformă formată din pachete NuGet. Pentru unele caracteristici ale produsului, detectarea modulelor mici este mai potrivită, iar pentru altele - modul mare. Având în vedere această dualitate, produsul este distribuit sub forma unui set de pachete cu module mici și apoi este descris ca blocuri mai mari folosind un tip de pachet denumit informal "metapacks".

Fiecare pachet .NET Core suportă execuția în diferite implementări .NET reprezentate de platforme. Unele dintre acestea sunt platforme tradiționale, de exemplu, pachetul net46 reprezintă .NET Framework. Un alt set este o nouă platformă pe care o puteți imagina ca o "platformă bazată pe pachete". Ele formează un nou model pentru determinarea platformelor. Platformele bazate pe pachete sunt pe deplin formate și definite ca pachete, creând astfel o relație strânsă între pachete și platforme.

Platforma .NET Core este împărțită într-un set de pachete care oferă tipuri primitive, tipuri de date de nivel superior, tipuri de aplicații compuse și utilități comune. Fiecare dintre aceste pachete reprezintă un ansamblu separat cu același nume. De exemplu, System.Runtime conține ansamblul System.Runtime.dll.

Definiția modulului mic al pachetelor are mai multe avantaje:

  • Pachetele cu module mici pot fi emise în funcție de programul propriu; Necesitatea de a testa alte pachete este relativ mică.
  • Pachetele cu module mici pot oferi suport OS și CPU diferite.
  • Pachetele cu module mici pot avea dependențe care se referă la o singură bibliotecă.
  • Aplicațiile au o dimensiune mai mică, deoarece pachetele care nu sunt menționate nu sunt incluse în pachetul de distribuție al aplicației.

Unele dintre aceste avantaje sunt realizate numai în anumite condiții. De exemplu, pachetele NET Core sunt, de obicei, lansate într-un singur program, cu același suport de platformă. În scopuri de întreținere, patch-urile pot fi distribuite și instalate ca actualizări pentru pachetele individuale. Datorită faptului că remedierea este aplicată unei biblioteci separate, timpul de verificare și de furnizare este redus.

Următoarea este o listă a principalelor pachete NuGet pentru .NET Core:

Pachete Meta

O meta-pachet este un acord în cadrul NuGet pentru a descrie un set de pachete care sunt într-un fel legate unul de celălalt. Pentru a reprezenta un set de pachete ca un pachet meta, pachetele se fac dependente. O metapachetă poate de asemenea să definească o platformă pentru un set de pachete prin specificarea unei platforme adecvate.

Utilizarea metacachetelor oferă următoarele avantaje:

  • permite utilizatorilor să se refere cu ușurință la un set mare de pachete la scară mică;
  • vă permite să definiți seturi de pachete (inclusiv versiuni specifice) care sunt testate și aplicate ca o singură unitate.

Metapachet standard NET:

  • NETStandard.Library - descrie bibliotecile incluse în standardul .NET. Se aplică tuturor implementărilor .NET (de exemplu, .NET Framework .NET Core și Mono) care acceptă standardul .NET. Formează platforma netstandard.

Metapactele de bază .NET Core:

  • Microsoft.NETCore.App - descrie bibliotecile care sunt incluse în pachetul .NET Core distribuit. Formează platforma .NETCoreApp. Depinde de meta-pachetul NETStandard.Library.
  • Microsoft.NETCore.Portable.Compatibility este un set de interfețe de compatibilitate care permit executarea bibliotecilor de clase portabile bazate pe mscorlib în .NET Core.

infrastructură

Pachetele .NET Core suportă un set de platforme de rulare. Platforma descrie un set disponibil de API (și, eventual, alte caracteristici) care pot fi folosite pentru a crea o soluție pentru această platformă. Platformei i se atribuie o nouă versiune atunci când adaugă API-uri noi.

De exemplu, System.IO.FileSystem acceptă următoarele platforme:

  • .NETFramework, versiunea = 4.6;
  • .NETStandard, versiunea = 1.3;
  • 6 platforme Xamarin (de exemplu, xamarinios10).

Va fi util să comparăm primele două dintre aceste platforme, deoarece acestea reprezintă două moduri diferite de determinare a platformelor.

Platforma .NETFramework, Version = 4.6 reprezintă API-urile disponibile în .NET Framework 4.6. Puteți crea o bibliotecă compilat cu ansambluri de referință .NET Framework 4.6, și apoi le distribuie în pachete în NuGet dosar net46 lib. Acest director va fi utilizat pentru aplicații destinate platformei .NET Framework 4.6 sau compatibile cu aceasta. Astfel au funcționat în mod tradițional platformele.

Platforma .NETStandard, Version = 1.3, este o platformă bazată pe pachete. Utilizează pachetele destinate platformei pentru a identifica și furniza API-uri în contextul platformei.

Platforme bazate pe pachete

Între platforme și pachete există o comunicare bidirecțională. Platformele definesc API-urile disponibile pentru o anumită platformă, de exemplu netstandard1.3. Pachetele destinate pentru netstandard1.3 (sau platforme compatibile, de exemplu netstandard1.0) definesc API-urile disponibile pentru netstandard1.3. O astfel de definiție poate părea închisă ciclic, dar nu este. API-urile pentru platformă se bazează pe pachete, care sunt definite în ele. Platforma însăși nu definește API-urile.

A doua parte a comunicării este alegerea resurselor. Pachetele pot conține resurse pentru mai multe platforme. Dacă există o legătură într-un set de pachete sau meta-pachete, platforma trebuie să determine care dintre resurse să aleagă, de exemplu net46 sau netstandard1.3. Este important să alegeți resursa potrivită. De exemplu, resursa net46 este puțin probabil să fie compatibilă cu .NET Framework 4.0 sau .NET Core 1.0.

Pachete, meta-pachete și platforme, microsoft docs

Această relație poate fi văzută în figura de mai jos. Interfața API vizează platforma și o definește. Platforma servește pentru selectarea unui activ. Activul oferă un API.

În platforma .NET Core două platforme principale sunt utilizate pe baza pachetelor:

.NET Standard

Platforma .NET Standard (monikerul platformei țintă: netstandard) reprezintă API-urile definite și create pe baza standardului .NET. Bibliotecile destinate diferitelor medii de execuție ar trebui să vizeze această platformă. Acestea vor fi acceptate în orice mediu de rulare compatibil cu standardul .NET, cum ar fi .NET Core. NET Framework și Mono sau Xamarin. Fiecare dintre aceste medii de rulare suportă o serie de versiuni .NET Standard, în funcție de API-urile pe care le implementează.

Platforma netstandard se referă implicit la metabagalul NETStandard.Library. De exemplu, următorul fișier de proiect MSBuild indică faptul că proiectul este pentru biblioteca netstandard1.6. care se referă la meta-pachetul NETStandard.Library versiunea 1.6.

Dar referințele platformei și metapachetei din fișierul de proiect nu trebuie să fie aceleași și puteți utiliza elementul în fișierul proiectului pentru a specifica versiunea platformei care este mai mică decât versiunea pachetului meta. De exemplu, următorul fișier de proiect este valabil.

Direcționarea netstandard1.3 și utilizarea concomitentă a versiunii 1.6.0 a bibliotecii NETStandard.Library poate părea ciudată. Totuși, acesta este un scenariu de utilizare valid, deoarece metapachetul acceptă versiuni mai vechi ale netstandard. De exemplu, ați putea alege versiunea 1.6.0 a meta-pachetului pentru a standardiza toate bibliotecile care sunt destinate diferitelor versiuni ale netstandard. Cu această abordare, trebuie doar să restaurați NETStandard.Library 1.6.0, dar nu versiuni anterioare.

Reverse (de exemplu, direcționarea netstandard1.6 cu NETStandard.Library versiunea 1.3.0) nu este permisă. Direcționarea unei versiuni specifice a platformei cu o versiune anterioară a pachetului meta-pachet este imposibilă, deoarece o astfel de meta-pachet nu va oferi resurse pentru platforma unei versiuni ulterioare. Conform schemei de control al versiunii metapachete, metapachetele corespund celei mai recente versiuni a platformei pe care o descriu. Datorită acestei scheme de control al versiunii, prima versiune a NETStandard.Library este 1.6.0, cu condiția să conțină resurse netstandard1.6. Versiunea 1.3.0 este folosită în exemplul anterior pentru consistența cu un alt exemplu de mai sus, deși nu există într-adevăr o astfel de versiune.

.NET Application Core

Platforma .NET Core Application (TFM: netcoreapp) introduce pachetele și API asociate care fac parte din pachetul de distribuție .NET Core și modelul de aplicație al consolei pe care îl furnizează. Aplicațiile .NET Core ar trebui să utilizeze această platformă pentru că vizează modelul de aplicație consola, precum și bibliotecile proiectate să funcționeze numai în .NET Core. Atunci când utilizați această platformă, aplicațiile și bibliotecile pot rula numai în .NET Core.

Metapachetul Microsoft.NETCore.App este pentru platforma netcoreapp. Acesta oferă acces la aproximativ 40 de biblioteci furnizate de NETStandard.Library. și aproximativ 20 de biblioteci suplimentare (aproximativ 60 de biblioteci în total). Puteți consulta bibliotecile suplimentare create pentru netcoreapp sau platforme compatibile, de exemplu netstandard. pentru a avea acces la API-uri suplimentare.

Majoritatea bibliotecilor suplimentare furnizate de Microsoft.NETCore.App. de asemenea, proiectat pentru netstandard. cu condiția ca aceste dependențe să fie furnizate de alte biblioteci netstandard. Aceasta înseamnă că bibliotecile netstandard se pot referi și la aceste pachete ca dependențe.