Správa verzí balíčků
Konkrétní balíček se vždy označuje pomocí identifikátoru balíčku a přesného čísla verze. Například Entity Framework na nuget.org má k dispozici několik desítek konkrétních balíčků od verze 4.1.10311 až po verzi 6.1.3 (nejnovější stabilní verze) a řadu předběžných verzí, jako je 6.2.0-beta1.
Při vytváření balíčku přiřadíte konkrétní číslo verze s volitelnou příponou předběžné verze. Při využívání balíčků můžete na druhé straně zadat přesné číslo verze nebo rozsah přijatelných verzí.
Následující dokument se řídí standardem sémantické verze 2.0.0 , který podporuje NuGet 4.3.0+ a Visual Studio 2017 verze 15.3 nebo novější. Některé sémantika semVer v2.0.0 nejsou ve starších klientech podporovány.
V tomto tématu:
- Základy verzí včetně přípon před vydáním
- Rozsahy verzí
- Normalizovaná čísla verzí
- Sémantika správy verzí 2.0.0
Základy verzí
Konkrétní číslo verze je ve formátu Major.Minor.Patch[-Suffix], kde součásti mají následující významy:
- Hlavní: Zásadní: Zásadní změny
- Podverze: Nové funkce, ale zpětně kompatibilní
- Oprava: Opravám chyb, které jsou zpětně kompatibilní
- -Suffix (volitelné): spojovník následovaný řetězcem označujícím předběžnou verzi (podle konvence Semantic Versioning nebo SemVer ).
Příklady:
1.0.1
6.11.1231
4.3.1-rc
2.2.44-beta.1
Důležité
nuget.org odmítne nahrání balíčku, který nemá přesné číslo verze. Verze musí být zadána .nuspec
v souboru projektu nebo použitém k vytvoření balíčku.
Předběžné verze
Tvůrci balíčků můžou technicky vzato použít libovolný řetězec jako příponu k označení předběžné verze, protože NuGet považuje všechny takové verze jako předběžnou verzi a nevytváří žádnou jinou interpretaci. To znamená, že NuGet zobrazí celý řetězec verze v jakémkoli uživatelském rozhraní, takže jakákoli interpretace významu přípony pro příjemce.
To znamená, že vývojáři balíčků obecně dodržují rozpoznané zásady vytváření názvů:
-alpha
: Alfa verze, která se obvykle používá pro probíhající práci a experimentování.-beta
: Beta verze, obvykle ta, která je dokončena pro příští plánovanou verzi, ale může obsahovat známé chyby.-rc
: Release Candidate, obvykle vydání, které je potenciálně konečné (stabilní), pokud se neobjeví významné chyby.
Při řazeníverzíchm kódem NuGet se řídí standardem SemVer a jako první zvolí verzi bez přípony, použije přednost pro předběžné verze v abecedním pořadí a zachází s čísly zápisu tečky s číselným pořadím.
Poznámka:
Předprodejní čísla s zápisem tečky, jak je uvedeno v 1.0.1-build.23, jsou považovány za součást standardu SemVer 2.0.0 a jako takové jsou podporovány pouze u NuGetu 4.3.0+.
1.0.1
1.0.1-zzz
1.0.1-rc.10
1.0.1-rc.2
1.0.1-open
1.0.1-beta
1.0.1-alpha2
1.0.1-alpha10
1.0.1-aaa
Všimněte si, že 1.0.1-alpha10 je seřazen výhradně v opačném abecedním pořadí, zatímco 1.0.1-rc.10 má větší prioritu než 1.0.1-rc.2.
Rozsahy verzí
Při odkazování na závislosti balíčků NuGet podporuje zápis intervalu pro určení rozsahů verzí shrnutý takto:
Notace | Použité pravidlo | Popis |
---|---|---|
1.0 | x ≥ 1,0 | Minimální verze (včetně) |
[1.0,) | x ≥ 1,0 | Minimální verze (včetně) |
(1.0,) | x > 1,0 | Minimální verze (vyjma) |
[1.0] | x == 1.0 | Přesná shoda verze |
(,1.0] | x ≤ 1.0 | Maximální verze (včetně) |
(,1.0) | x < 1,0 | Maximální verze (vyjma) |
[1.0,2.0] | 1.0 ≤ x ≤ 2.0 | Přesný rozsah (včetně) |
(1.0,2.0) | 1,0 < x < 2,0 | Přesný rozsah (vyjma) |
[1.0,2.0) | 1,0 ≤ x < 2,0 | Kombinace minimální (včetně) a maximální (vyjma) verze |
(1.0) | neplatné | neplatné |
Příklady
Vždy zadejte verzi nebo rozsah verzí pro závislosti balíčků v souborech projektu, packages.config
souborech a .nuspec
souborech. Bez rozsahu verzí nebo verzí zvolí NuGet 2.8.x a starší nejnovější dostupnou verzi balíčku při překladu závislosti, zatímco NuGet 3.x a novější zvolí nejnižší verzi balíčku. Určení verze nebo rozsahu verzí zabrání této nejistotě.
Odkazy v souborech projektu (PackageReference)
<!-- Accepts any version 6.1 and above.
Will resolve to the smallest acceptable stable version.-->
<PackageReference Include="ExamplePackage" Version="6.1" />
<!-- Accepts any 6.x.y version.
Will resolve to the highest acceptable stable version.-->
<PackageReference Include="ExamplePackage" Version="6.*" />
<!-- Accepts any version above, but not including 4.1.3. Could be
used to guarantee a dependency with a specific bug fix.
Will resolve to the smallest acceptable stable version.-->
<PackageReference Include="ExamplePackage" Version="(4.1.3,)" />
<!-- Accepts any version up below 5.x, which might be used to prevent pulling in a later
version of a dependency that changed its interface. However, this form is not
recommended because it can be difficult to determine the lowest version.
Will resolve to the smallest acceptable stable version.
-->
<PackageReference Include="ExamplePackage" Version="(,5.0)" />
<!-- Accepts any 1.x or 2.x version, but not 0.x or 3.x and higher.
Will resolve to the smallest acceptable stable version.-->
<PackageReference Include="ExamplePackage" Version="[1,3)" />
<!-- Accepts 1.3.2 up to 1.4.x, but not 1.5 and higher.
Will resolve to the smallest acceptable stable version. -->
<PackageReference Include="ExamplePackage" Version="[1.3.2,1.5)" />
Odkazy v packages.config
:
Každá packages.config
závislost je uvedena s přesným version
atributem, který se používá při obnovování balíčků. Atribut allowedVersions
se používá pouze během aktualizačních operací k omezení verzí, na které se balíček může aktualizovat.
<!-- Install/restore version 6.1.0, accept any version 6.1.0 and above on update. -->
<package id="ExamplePackage" version="6.1.0" allowedVersions="6.1.0" />
<!-- Install/restore version 6.1.0, and do not change during update. -->
<package id="ExamplePackage" version="6.1.0" allowedVersions="[6.1.0]" />
<!-- Install/restore version 6.1.0, accept any 6.x version during update. -->
<package id="ExamplePackage" version="6.1.0" allowedVersions="[6,7)" />
<!-- Install/restore version 4.1.4, accept any version above, but not including, 4.1.3.
Could be used to guarantee a dependency with a specific bug fix. -->
<package id="ExamplePackage" version="4.1.4" allowedVersions="(4.1.3,)" />
<!-- Install/restore version 3.1.2, accept any version up below 5.x on update, which might be
used to prevent pulling in a later version of a dependency that changed its interface.
However, this form is not recommended because it can be difficult to determine the lowest version. -->
<package id="ExamplePackage" version="3.1.2" allowedVersions="(,5.0)" />
<!-- Install/restore version 1.1.4, accept any 1.x or 2.x version on update, but not
0.x or 3.x and higher. -->
<package id="ExamplePackage" version="1.1.4" allowedVersions="[1,3)" />
<!-- Install/restore version 1.3.5, accepts 1.3.2 up to 1.4.x on update, but not 1.5 and higher. -->
<package id="ExamplePackage" version="1.3.5" allowedVersions="[1.3.2,1.5)" />
Odkazy v .nuspec
souborech
Atribut version
v elementu <dependency>
popisuje verze rozsahu, které jsou přijatelné pro závislost.
<!-- Accepts any version 6.1 and above. -->
<dependency id="ExamplePackage" version="6.1" />
<!-- Accepts any version above, but not including 4.1.3. Could be
used to guarantee a dependency with a specific bug fix. -->
<dependency id="ExamplePackage" version="(4.1.3,)" />
<!-- Accepts any version up below 5.x, which might be used to prevent pulling in a later
version of a dependency that changed its interface. However, this form is not
recommended because it can be difficult to determine the lowest version. -->
<dependency id="ExamplePackage" version="(,5.0)" />
<!-- Accepts any 1.x or 2.x version, but not 0.x or 3.x and higher. -->
<dependency id="ExamplePackage" version="[1,3)" />
<!-- Accepts 1.3.2 up to 1.4.x, but not 1.5 and higher. -->
<dependency id="ExamplePackage" version="[1.3.2,1.5)" />
Normalizovaná čísla verzí
Poznámka:
Jedná se o zásadní změnu pro NuGet 3.4 nebo novější.
Při získávání balíčků z úložiště během operací instalace, přeinstalace nebo obnovení nuGet 3.4+ považuje čísla verzí za následující:
Počáteční nuly se odeberou z čísel verzí:
- 1.00 se považuje za 1,0
- 1.01.1 se považuje za 1.1.1.
- 1.00.0.1 se považuje za 1.0.0.1
Ve čtvrté části čísla verze se vynechá nula.
- 1.0.0.0 se považuje za 1.0.0.
- 1.0.01.0 se považuje za 1.0.1
Odebere se metadata sestavení SemVer 2.0.0.
- 1.0.7+r3456 se považuje za 1.0.7
pack
a restore
operace normalizují verze, kdykoli je to možné. U již vytvořených balíčků tato normalizace nemá vliv na čísla verzí v samotných balíčcích; ovlivňuje pouze to, jak NuGet odpovídá verzím při překladu závislostí.
Úložiště balíčků NuGet však musí s těmito hodnotami zacházet stejným způsobem jako s NuGetem, aby se zabránilo duplikování verzí balíčku. Úložiště, které obsahuje verzi 1.0 balíčku, by proto nemělo hostovat také verzi 1.0.0 jako samostatný a jiný balíček.
Sémantika správy verzí 2.0.0
Některé sémantika semVer v2.0.0 nejsou ve starších klientech podporovány. NuGet považuje verzi balíčku za specifickou pro SemVer v2.0.0, pokud platí některý z následujících tvrzení:
- Popisek předběžné verze je oddělený tečkami, například 1.0.0-alpha.1
- Verze obsahuje metadata sestavení, například 1.0.0+githash.
Pro nuget.org je balíček definován jako balíček SemVer v2.0.0, pokud je splněn některý z následujících příkazů:
- Vlastní verze balíčku je SemVer verze 2.0.0, ale není kompatibilní se semVer v1.0.0, jak je definováno výše.
- Některé z rozsahů verzí závislostí balíčku mají minimální nebo maximální verzi, která je kompatibilní s semVer v2.0.0, ale není kompatibilní se semVer v1.0.0, definovaná výše; Například [1.0.0-alpha.1, ).
Pokud nahrajete balíček specifický pro SemVer v2.0.0 do nuget.org, bude balíček neviditelný pro starší klienty a k dispozici pouze pro následující klienty NuGet:
- NuGet 4.3.0 nebo novější
- Visual Studio 2017 verze 15.3 nebo novější
- Visual Studio 2015 s NuGet VSIX v3.6.0
- .NET SDK 2.0.0+
Klienti třetích stran:
- JetBrains Rider
- Paket verze 5.0 nebo novější
Kde se NuGetVersion liší od sémantické správy verzí
Pokud chcete programově používat verze balíčků NuGet, důrazně doporučujeme použít balíček NuGet.Versioning. Statickou metodu NuGetVersion.Parse(string)
lze použít k analýze řetězců verzí a VersionComparer
lze ji použít k řazení NuGetVersion
instancí.
Pokud implementujete funkce NuGet v jazyce, který se nespouští v .NET, tady je známý seznam rozdílů mezi NuGetVersion
a sémantickou správou verzí a důvody, proč existující knihovna sémantických verzí nemusí fungovat pro balíčky, které jsou již publikovány v nuget.org.
NuGetVersion
podporuje 4. segment verze ,Revision
být kompatibilní s, nebo nadmnožinou ,System.Version
. Proto vyloučení předprodeje a popisků metadat jeMajor.Minor.Patch.Revision
řetězec verze . Podle výše popsané normalizace verzí se v případěRevision
nulové hodnoty vynechá z řetězce normalizované verze.NuGetVersion
vyžaduje pouze definování hlavního segmentu. Všechny ostatní jsou volitelné a jsou ekvivalentní nule. To znamená, že1
, ,1.0
1.0.0
a1.0.0.0
jsou všechny přijímány a rovny.NuGetVersion
používá porovnání řetězců nerozlišující malá a velká písmena pro předběžné verze komponent. To znamená, že1.0.0-alpha
a1.0.0-Alpha
jsou rovny.