Függőségek frissítéseinek kezelése a .NET-projektben

Befejeződött

Előbb vagy utóbb frissíteni szeretne egy tár új verziójára. Lehet, hogy egy függvény elavultként van megjelölve, vagy lehet, hogy a használt csomag egy későbbi verziójában új funkció található.

Mielőtt kísérletet tenne egy kódtár módosítására, mérlegelje az alábbi szempontokat:

  • A frissítés típusa: Milyen típusú frissítés érhető el? Kisebb hibajavítás? Új funkciót tesz elérhetővé, amelyre szüksége van? Megszegi a kódot? A frissítés típusáról a szemantikus verziószámozásnevű rendszerrel kommunikálhat. A kódtár verziószámának kifejezése közli a fejlesztőkkel a frissítés típusát, amellyel foglalkoznak.
  • Hogy a projekt megfelelően van-e konfigurálva: A .NET-projektet úgy konfigurálhatja, hogy csak a kívánt típusú frissítéseket kapja meg. A frissítést csak akkor hajtja végre, ha egy adott típusú frissítés érhető el. Ezt a megközelítést javasoljuk, mert nem kockáztatja, hogy meglepetésekbe ütközik.
  • Biztonsági problémák: A projektfüggőségek időben történő kezelése magában foglalja az esetleges problémák tudatos kezelését. Problémákat okoznak például a felfedezett biztonsági rések. Ideális esetben olyan javítások jelennek meg, amelyeket letölthet. A .NET Core-eszközzel naplózást végezhet a kódtárakon, így megtudhatja, hogy rendelkezik-e frissítésre szoruló csomagokkal. Emellett a problémák kijavításához szükséges lépéseket is könnyebben megteheti.

A szemantikus verziószámozás használata

Létezik egy szemantikai verziószámozásnak nevezett iparági szabvány, így fejezheti ki, hogy Ön vagy más fejlesztő milyen típusú módosítást vezet be egy kódtárban. A szemantikus verziószámozás úgy működik, hogy biztosítja, hogy egy csomag verziószámmal rendelkezik, és hogy a verziószám az alábbi szakaszokra legyen osztva:

  • Főverzió: A bal szélső szám. Ez például a 1 következő: 1.0.0. A szám módosítása azt jelenti, hogy a kódban "kompatibilitástörő változások" várhatók. Lehetséges, hogy a kódot részben újra kell írnia.
  • Alverzió: A középső szám. Ez például a 2 következő: 1.2.0. A szám módosítása azt jelenti, hogy a szolgáltatások hozzáadva lettek. A kódnak működőképesnek kell maradnia. Általában biztonságos a frissítés elfogadása.
  • Javítás verziója: A jobb szélső szám. Ez például a 3 következő: 1.2.3. A szám módosítása azt jelenti, hogy olyan módosítást alkalmaztak, amely kijavít valamit a kódban, amely működni fog. A frissítés elfogadása általában nem jelent kockázatot.

Ez a táblázat bemutatja a különböző verziótípusok verziószámainak változását.

Típus Mi történik
Főverzió 1.0.0 módosításokat a 2.0.0
Alverzió 1.1.1 módosításokat a 1.2.0
Javításverzió 1.0.1 módosításokat a 1.0.2

Ezt a rendszert sok vállalat és fejlesztő használja. Ha közzé szeretné tenni a csomagokat, és le szeretné küldeni őket a NuGet-beállításjegyzékbe, akkor a szemantikai verziókövetést kell követnie. Amikor pedig csomagokat tölt le a NuGet regisztrációs adatbázisából, számíthat rá, hogy a csomagok eleget tesznek a szemantikus verziószámozás követelményeinek.

A csomagok módosítása kockázattal járhat, akár üzleti kárt okozó hibát is bevezethet. Bizonyos kockázatok miatt szükségessé válhat a kód egy részének átírása. A kód újraírása pedig idő- és pénzigényes folyamat.

Frissítési módszer

.NET-fejlesztőként kommunikálhatja a .NET-hez használni kívánt frissítési viselkedést. A frissítéseket a kockázat szempontjából kell mérlegelni. Íme néhány módszer:

  • Főverzió: Rendben vagyok a legújabb főverzióra való frissítéssel, amint kijön. Elfogadom a tényt, hogy esetleg módosítani kell a kódot a végén.
  • Alverzió: Rendben vagyok egy új funkció hozzáadásával. Nem fogadok el olyan kódot, amely megszakíthatja a működést.
  • Javítás verziója: Az egyetlen frissítés, amellyel rendben vagyok, hibajavítások.

Ha egy új vagy kisebb méretű .NET-projekten dolgozik, megteheti, hogy lazán veszi a frissítési stratégia definiálását. Például bármikor frissíthet a legújabb verzióra. Összetettebb projektek esetén ez nem ilyen egyszerű, de erről egy későbbi modulban lesz szó.

Általában minél kisebb a frissítési függőség, annál kevesebb függősége van, és annál valószínűbb, hogy a frissítési folyamat egyszerű.

A projektfájl konfigurálása frissítéshez

Egy vagy több függőség hozzáadásakor konfigurálja a projektfájlt, hogy kiszámítható viselkedést kapjon a projekt visszaállítása, létrehozása vagy futtatása során. Közölheti, hogy milyen módszert szeretne alkalmazni egy csomagnál. A NuGet a verziótartományok és a lebegő verziók fogalmaival rendelkezik.

A verziótartományok egy speciális jelölés, amellyel a feloldani kívánt verziók egy adott tartományát jelölheti.

Jelölés Alkalmazott szabály Leírás
1.0 x >= 1,0 Legalacsonyabb verzió, határértékekkel
(1.0,) x > 1.0 Legalacsonyabb verzió, határértékek nélkül
[1.0] x == 1.0 Pontos verzióegyezés
(,1.0] x ≤ 1.0 Maximális verzió, határértékekkel
(,1.0) x < 1.0 Maximális verzió, határértékek nélkül
[1.0,2.0] 1.0 ≤ x ≤ 2.0 Pontos tartomány, határértékekkel
(1.0,2.0) 1,0 < x < 2,0 Pontos tartomány, határértékek nélkül
[1.0,2.0) 1.0 ≤ x < 2.0 Vegyes befoglaló legalacsonyabb és kizáró maximális verzió
(1.0) érvénytelen érvénytelen

A NuGet támogatja a szám fő, alverzió, javítás és utótag-utótagjainak lebegő verziójellel történő használatát is. Ez a jelölés csillag (*). A 6.0.* verziós specifikáció például "a legújabb 6.0.x verziót használja". Egy másik példában a 4.* azt jelenti, hogy "használja a legújabb 4.x verziót". A lebegő verzió használata csökkenti a projektfájl módosításait, miközben naprakészen tartja a függőség legújabb verzióját.

Feljegyzés

Azt javasoljuk, egy adott verziót telepítsen, és ne használjon verziófüggetlen jelöléseket. Egy adott verzió telepítése biztosítja, hogy a buildek megismételhetők legyenek, hacsak nem kér kifejezetten frissítést egy függőséghez.

Verziófüggetlen jelölés használata esetén a NuGet a csomagok verzió-mintázatnak megfelelő legújabb verzióját oldja fel. Az alábbi példában a 6.0.* egy csomag legújabb verzióját kapja meg, amely a 6.0-val kezdődik. Ez a 6.0.1 verzió.

Ábra a legújabb verzió kiválasztásáról lebegő verzió kérése esetén.

A főverziók, alverziók vagy javítások konfigurálására szolgáló példák:

<!-- Accepts any version 6.1 and later. -->
<PackageReference Include="ExamplePackage" Version="6.1" />

<!-- Accepts any 6.x.y version. -->
<PackageReference Include="ExamplePackage" Version="6.*" />
<PackageReference Include="ExamplePackage" Version="[6,7)" />

<!-- Accepts any later version, but not including 4.1.3. Could be
     used to guarantee a dependency with a specific bug fix. -->
<PackageReference Include="ExamplePackage" Version="(4.1.3,)" />

<!-- Accepts any version earlier than 5.x, which might be used to prevent pulling in a later
     version of a dependency that changed its interface. However, we don't recommend this form because determining the earliest version can be difficult. -->
<PackageReference Include="ExamplePackage" Version="(,5.0)" />

<!-- Accepts any 1.x or 2.x version, but not 0.x or 3.x and later. -->
<PackageReference Include="ExamplePackage" Version="[1,3)" />

<!-- Accepts 1.3.2 up to 1.4.x, but not 1.5 and later. -->
<PackageReference Include="ExamplePackage" Version="[1.3.2,1.5)" />

Elavult csomagok keresése és frissítése

Az dotnet list package --outdated parancs felsorolja az elavult csomagokat. Ezzel a paranccsal megtudhatja, ha új csomagverziók érhetők el. A parancs a következő tipikus kimenetet jeleníti meg:

Top-level Package      Requested   Resolved   Latest
> Humanizer            2.7.*       2.7.9      2.8.26

Itt láthatók a kimenet oszlopainak neveihez tartozó jelentések:

  • Requested: A megadott verzió vagy verziótartomány.
  • Resolved: A projekthez letöltött tényleges verzió, amely megfelel a megadott verziónak.
  • Latest: A NuGet legújabb verziója frissíthető.

Az ajánlott munkafolyamat a következő parancsok futtatása ebben a sorrendben:

  1. Futtassa az dotnet list package --outdated parancsot. Ez a parancs felsorolja az elavult csomagokat. Információkkal szolgál a Requested, Resolved és Latest oszlopokban.
  2. Futtassa az dotnet add package <package name> parancsot. Ha ezt a parancsot futtatja, az a legújabb verzióra próbál frissíteni. Igény szerint megadhatja hozzá a --version=<version number/range> argumentum.