Függőségek frissítéseinek kezelése a .NET-projektben
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ó.
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:
- Futtassa az
dotnet list package --outdated
parancsot. Ez a parancs felsorolja az elavult csomagokat. Információkkal szolgál aRequested
,Resolved
ésLatest
oszlopokban. - 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.