Csomagok felvétele a .NET-projektbe

Befejeződött

A .NET-hez hozzátartozik több alapvető kódtár is, amelyek a fájlok kezelésétől a HTTP-n át a tömörítésig sok mindent kezelnek. Létezik emellett a külső kódtárak kiterjedt ökoszisztémája is. A .NET csomagkezelője, a NuGet használatával telepítheti ezeket a kódtárakat, majd felhasználhatja őket az alkalmazásban.

A .NET és ökoszisztémája kapcsán gyakran használt szó a függőség. A csomagfüggőségek külső kódtárak. Ez egy újrafelhasználható kód, amely végrehajt valamit, és amelyet hozzáadhat az alkalmazáshoz. Az alkalmazás működése ettől a külső kódtártól függ, ezért nevezzük azt függőségnek.

A harmadik féltől származó kódtárat csomagként tekintheti, és egy adattárban tárolja. Egy csomag tartalma egy vagy több olyan könyvtár lehet, amelyet az alkalmazáshoz adhat, hogy felhasználhassa annak funkcióit.

Itt a csomagfüggőségekkel foglalkozunk. A .NET-projektek más típusú függőségekkel is rendelkezhetnek, például keretrendszerekkel, elemzőkkel, projekthivatkozásokkal és megosztott projektfüggőségekkel, valamint csomagfüggőségekkel.

Annak meghatározása, hogy szükség van-e csomagra

Honnan lehet megtudni, hogy a projekthez szükség van egy csomagra? Ez összetett kérdés, amelyet több tényező határoz meg, nevezetesen a következők:

  • Jobb kód beszerzése: Kérdezze meg magától, hogy egy olyan feladattal foglalkozik-e, mint például a biztonság, és megpróbál hitelesítést és engedélyezést implementálni. A saját adatok és az ügyfelek adatainak védelme érdekében is fontos, hogy ezen a területen minden rendben legyen. Léteznek erre standard minták, és sok fejlesztő által használt kódtárak. Ezek a kódtárak olyan funkciókat implementálnak, amelyekre valószínűleg mindig szüksége lesz, és a problémák a felmerülő problémákat kijavítják. Érdemes ezeket a kódtárakat felhasználni ahelyett, hogy sajátokat hozna létre. Nem valószínű, hogy saját maga is megírja a kódot, mert olyan sok peremes eset van, amelyet figyelembe kell vennie.
  • Időt takaríthat meg: A legtöbb dolgot saját maga is létrehozhatja, például segédprogram- vagy felhasználói felületi összetevőtárakat, de ez időt vesz igénybe. Ha feleslegesen ír kódot, az akkor sem az idő hatékony felhasználása, ha a végeredmény összemérhető a már meglévővel.
  • Karbantartás: Minden kódtárnak és alkalmazásnak előbb vagy utóbb karbantartásra van szüksége. A karbantartás során új funkciókat ad hozzá, és kijavítja a hibákat. Jól használja ki az idejét, vagy a csapata idejét egy könyvtár karbantartására, vagy jobb, ha egy nyílt forráskódú szoftvercsapat kezeli?

Csomag kiértékelése

A kódtár telepítése előtt érdemes lehet megvizsgálni azokat a függőségeket, amelyekre támaszkodik. Ezek a függőségek a csomag használatára is ösztönözhetik Önt, de akár el is tántoríthatják attól. A projekt függőségeinek kiválasztásakor érdemes figyelembe venni azok néhány jellemzőjét:

  • Méret: A függőségek száma nagy lábnyomot eredményezhet. Ha korlátozott a sávszélesség, vagy a hardver más korlátait kell figyelembe vennie, akkor ez is problémát okozhat.
  • Licencelés: Gondoskodnia kell arról, hogy a könyvtárhoz megadott licenc kiterjedjen a kívánt használatra, függetlenül attól, hogy a felhasználás kereskedelmi, személyes vagy tudományos jellegű-e.
  • Aktív karbantartás: Probléma lehet, ha a csomag elavult vagy hosszú ideje nem frissített függőségre támaszkodik.

A telepítés előtt az https://www.nuget.org/packages/<package name> oldalon további információt találhat a csomagokról. Ez az URL-cím a csomag részletes lapjára viszi. Válassza ki a Függőségek legördülő listát, és nézze meg, hogy mely csomagokra támaszkodik a függvény.

A felsorolt függőségek száma önmagában nem feltétlenül árul el mindent. Ha letölt egy csomagot, előfordulhat, hogy a csomagfüggőségben több tucat csomag lesz. Miért? Minden csomaghoz hozzátartozik a függőségei listája. A csomag használhatósága érdekében az dotnet add package <package name> parancs kiadásakor a rendszer az összes csomagot sorra veszi és letölti.

Csomag telepítése

A csomagok számos módon telepíthetők. A Visual Studio és a Visual Studio for Mac beépített csomagkezelői parancssorral és grafikus felhasználói felülettel rendelkezik. Manuálisan is hozzáadhat csomaghivatkozásokat a projektfájlhoz, vagy telepítheti őket egy parancssori felületi eszközzel (például a Pakettel vagy a .NET Core CLI-vel).

Ebben a modulban a beépített .NET Core CLI-vel telepítjük a csomagokat. A terminálban kiadott paranccsal egy csomagot vehet fel a .NET-projektbe. Egy tipikus telepítési parancs a következőképpen néz ki: dotnet add package <name of package>. A add package parancs futtatásakor a parancssori eszköz csatlakozik a globális regisztrációs adatbázishoz, letölti a csomagot, és elhelyezi azt egy gyorsítótárazott mappában, amelyet minden projekt felhasználhat.

A projekt telepítése és buildelése után a rendszer hozzáadja a hivatkozásokat a hibakeresési vagy kiadási mappákhoz. A projektkönyvtár így néz ki:

-| bin/
---| Debug/
------| net3.1
--------| <files included in the dependency>

Csomag megkeresése

Az önálló fejlesztők a NuGet.org globális regisztrációs adatbázisát használhatják az alkalmazásaikhoz szükséges csomagok megkeresésére és letöltésére. Egy vállalatnál egy stratégia is érvényben lehet a megfelelő csomagokra és azok helyére vonatkozóan.

Screenshot of NuGet.org showing a list of popular packages.

A csomagok számos különböző helyen elhelyezhetők. Előfordulhat, hogy ezek a források nyilvánosan elérhetők, egyes források pedig korlátozottak, és csak egy adott vállalat alkalmazottai számára érhetők el. Íme néhány hely, ahol a csomagok lehetnek:

  • Regisztrációs adatbázisok: Ilyen lehet például egy globális beállításjegyzék, például a NuGet.org beállításjegyzék. Ön is üzemeltethet saját regisztrációs adatbázist, amely lehet privát vagy nyilvános. Az olyan szolgáltatások, mint a GitHub és az Azure DevOps, privát regisztrációs adatbázisokat is kínálnak.
  • Fájlok: Egy csomagot helyi mappából telepíthet. A csomagból való telepítés gyakori, ha saját .NET-kódtárakat próbál létrehozni, és helyileg szeretné tesztelni a csomagot, vagy valamilyen okból nem szeretne beállításjegyzéket használni.

Diagram that illustrates the relationship between package creators, package hosts, and package consumers.

A NuGet regisztrációs adatbázisa és a dotnet eszköz

Az dotnet add package <name of dependency> parancs futtatásakor a .NET egy globális regisztrációs adatbázishoz, az úgynevezett NuGet.org adatbázishoz fordul, és ott keresi a letöltendő kódot. Itt található https://nuget.org: . Ha böngészővel látogatja meg, ezen a lapon csomagokat is kereshet. Minden csomaghoz tartozik egy dedikált webhely, ahová mehet.

Screenshot of the landing page for a NuGet package.

Ezeken a webhelyeken többet megtudhat a forráskód helyéről. A letöltések metrikái és a karbantartással kapcsolatos információk is megtalálhatók.

Screenshot of information and metrics on a NuGet package.

.NET-parancsok

Az eddigiekben azt tanulhatta meg, hogyan telepíthet függőségeket a .NET Core parancssori felületének használatával. De az eszköz ennél sokkal többre is képes.

A .NET Core CLI számos paranccsal rendelkezik. A parancsokkal olyan feladatokat végezhet el, mint a csomagok telepítése és elkészítése, valamint .NET-projektek inicializálása. Nem kell minden parancsot részletesen ismernie. A.NET-tel történő ismerkedés során valószínűleg csak néhány parancsot fog használni. Ahogyan egyre több mindenre kezdi használni a .NET-et, egyre több parancsot is használhat, többféle kategóriában.

A parancsok szerepének megjegyzése érdekében célszerű őket kategóriákra osztani:

  • Függőségek kezelése: Az ebben a kategóriában szereplő parancsok a telepítésre, az eltávolításra, a csomagtelepítések utáni törlésre és a csomagfrissítésekre vonatkoznak.
  • Programok futtatása: A .NET Core eszköz segítségével kezelheti az alkalmazásfejlesztés folyamatait. Ilyen folyamat például a tesztek futtatása, a kód elkészítése, és a projektek frissítését szolgáló migrálási parancsok futtatása.
  • Csomagok létrehozása és közzététele: Számos parancs segíthet olyan feladatok elvégzésében, mint a tömörített csomagok létrehozása és a csomag egy regisztrációs adatbázisba való leküldése.

Részletes listát a parancsokról az dotnet --help paranccsal jeleníthet meg.

Csomag telepítése

dotnet add package <dependency name> A parancs használatával telepíthet egy normál függőséget, amelyet az alkalmazás részeként kíván használni.

Megjegyzés:

Egyes csomagokat globálisan telepíthet. Ezeket a csomagokat nem kell importálni a projektbe. Sok globális csomag éppen ezért parancssori eszköz vagy sablon. Ezeket a globális eszközöket is telepítheti egy csomagtárból. Eszközöket a dotnet tool install <name of package> paranccsal telepíthet. Sablonokat a dotnet new -i <name of package> paranccsal telepíthet.

A telepítés után

A telepített csomagok a .csproj-fájl dependencies szakaszában vannak feltüntetve. Az dotnet list package paranccsal megtekintheti, mely csomagok találhatók a mappában.

Project 'DotNetDependencies' has the following package references
   [net8.0]:
   Top-level Package      Requested   Resolved
   > Humanizer            2.7.9       2.7.9

Ez a parancs csak a legfelső szintű csomagokat sorolja fel, az átvitt csomagoknak nevezett csomagok függőségeit nem. Kényelmesen kínál gyors bepillantást. A részletesebb vizsgálathoz az összes tranzitív csomag is kilistázható. Ha így tesz, a parancs a list következőképpen néz ki:

dotnet list package --include-transitive

A tranzitív csomagok belefoglalásával a függőségeket is megtekintheti az összes telepített csomag mellett. Futtatás dotnet list package --include-transitiveesetén ez a kimenet jelenhet meg:

Project 'DotNetDependencies' has the following package references
   [net8.0]:
   Top-level Package      Requested   Resolved
   > Humanizer            2.7.9       2.7.9

   Transitive Package               Resolved
   > Humanizer.Core                 2.7.9
   > Humanizer.Core.af              2.7.9
   > Humanizer.Core.ar              2.7.9
   > Humanizer.Core.bg              2.7.9
   > Humanizer.Core.bn-BD           2.7.9
   > Humanizer.Core.cs              2.7.9
   ...

Függőségek helyreállítása

Projekt létrehozásakor vagy klónozásakor a program nem tölti le vagy telepíti a belefoglalt függőségeket, amíg létre nem hozza a projektet. A parancs futtatásával dotnet restore manuálisan visszaállíthatja a függőségeket, valamint a projektfájlban megadott projektspecifikus eszközöket. A legtöbb esetben nem szükséges explicit módon kiadnia a parancsot. A NuGet-visszaállítás implicit módon, ha szükséges, az olyan parancsok futtatásakor, mint az new, buildés run.

Függőségek törlése

Előbb-utóbb valószínűleg rájön, hogy már nincs szüksége csomagra, vagy észreveheti, hogy nem a telepített csomagra van szüksége. Esetleg talált egyet, amely hatékonyabban végzi el az adott feladatot. Bármi is az ok, célszerű eltávolítani a nem használt függőségeket. Így átlátható maradhat a projekt. A függőségek emellett is helyet foglalnak.

Ha el szeretne távolítani egy csomagot a projektből, használja a remove következő parancsot: dotnet remove package <name of dependency>. Ez a parancs eltávolítja a csomagot a projekt .csproj fájljából.