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

Befejeződött

Előbb vagy utóbb frissítenie kell egy kódtá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? Megzavarná 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. Így csak akkor végez frissítést, ha egy megadott 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. Ha minden jól megy, megjelennek a letölthető javítások. 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. Például az 1 az 1.0.0 verziószámban. Ha ez a szám megváltozik, az azt jelenti, hogy kompatibilitástörő változások várhatók a kódban. Lehetséges, hogy a kódot részben újra kell írnia.
  • Alverzió: A középső szám. Például a 2 az 1.2.0 verziószámban. Ha ez a szám megváltozik, az azt jelenti, hogy új funkciókkal bővült a verzió. A kódnak működőképesnek kell maradnia. A frissítés elfogadása általában nem jelent kockázatot.
  • Javítás verziója: A jobb szélső szám. Például a 3 az 1.2.3 verziószámban. Ha ez a szám megváltozik, az azt jelenti, hogy valamit kijavítottak a kódban, aminek működnie kellett volna. 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.

Type Mi történik
Főverzió 1.0.0 --> 2.0.0
Alverzió 1.1.1 --> 1.2.0
Javításverzió 1.0.1 --> 1.0.2

Sok vállalat és fejlesztő használja ezt a rendszert. Ha csomagokat szeretne közzétenni, és le szeretné küldeni őket a NuGet-beállításjegyzékbe, kövesse a szemantikai verziókövetést; ez várható. 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ítendő függőség, annál kevesebb függőséggel rendelkezik, így annál könnyebb lesz a frissítési folyamat.

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

Egy vagy több függőség hozzáadásakor fontolja meg a projektfájl konfigurálását, hogy kiszámítható legyen a viselkedése a projekt helyreállításakor, buildelésekor vagy futtatásakor. Közölheti, hogy milyen módszert szeretne alkalmazni egy csomagnál. A NuGet kezeli a verziótartományokat és a verziófüggetlen jelölést.

Vegyük először a verziótartományokat. Ez egy speciális jelölés, amellyel a feloldani kívánt verziótartományok szabhatók meg.

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 emellett verziófüggetlen jelölést is támogat a szám fő- és alverzióihoz, javításaihoz és kiadás előtti utótagrészeihez. 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.

Megjegyzé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ó.

Diagram showing choosing the latest version when a floating version is requested.

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