Paket sürümü oluşturma
Belirli bir pakete her zaman paket tanımlayıcısı ve tam sürüm numarası kullanılır. Örneğin, nuget.org Entity Framework sürüm 4.1.10311 sürüm 6.1.3 (en son kararlı sürüm) ve 6.2.0-beta1gibi çeşitli yayın öncesi sürümlere kadar birçok farklı paket mevcuttur.
Paket oluştururken, isteğe bağlı yayın öncesi metin soneki ile belirli bir sürüm numarası atarsınız. Öte yandan paketleri kullanırken, tam sürüm numarasını veya kabul edilebilir sürüm aralığını belirtebilirsiniz.
Aşağıdaki belge, NuGet 4.3.0+ ve Visual Studio 2017 sürüm 15.3+ tarafından desteklenen AnlamSal Sürüm oluşturma 2.0.0 standardını izler.
SemVer v2.0.0 bazı
Bu konuda:
- Sürüm temelleri, yayın öncesi son ekleri de dahil olmak üzere.
- Sürüm aralıkları
- normalleştirilmiş sürüm numaralarını
- AnlamSal Sürüm Oluşturma 2.0.0
Sürümle ilgili temel bilgiler
Belirli bir sürüm numarası, Major.Minor.Patch[-Suffix]biçimindedir; burada bileşenler aşağıdaki anlamlara sahiptir:
- Ana: Hataya neden olan değişiklikler
- İkincil: Yeni özellikler, ancak geriye dönük uyumlu
- Düzeltme Eki: Yalnızca geriye dönük uyumlu hata düzeltmeleri
- -Suffix (isteğe bağlı): Kısa çizgi ve ardından yayın öncesi sürümü belirten bir dize (AnlamSal Sürüm Oluşturma veya SemVer kuralına göre).
Örnekleri:
1.0.1
6.11.1231
4.3.1-rc
2.2.44-beta.1
Önemli
nuget.org tam sürüm numarası olmayan tüm paket yüklemelerini reddeder. Sürüm, paketi oluşturmak için kullanılan .nuspec
veya proje dosyasında belirtilmelidir.
Yayın öncesi sürümler
Teknik olarak bakıldığında, NuGet sürüm öncesi gibi herhangi bir sürüme ön sürüm olarak davranıp başka yorum yapmaması nedeniyle paket oluşturucuları yayın öncesi sürümü belirtmek için herhangi bir dizeyi sonek olarak kullanabilir. Diğer bir deyişle, NuGet söz konusu kullanıcı arabiriminde tam sürüm dizesini görüntüler ve son ekin anlamını tüketiciye yorumlar.
Bu, paket geliştiricileri genellikle tanınan adlandırma kurallarını izler:
-
-alpha
: Alfa sürümü, genellikle devam eden iş ve deneme için kullanılır. -
-beta
: Beta sürümü, genellikle bir sonraki planlı sürüm için özellik tamamlanmış ancak bilinen hatalar içerebilen bir sürümdür. -
-rc
: Önemli hatalar ortaya çıkmadığı sürece genellikle son (kararlı) olabilecek bir sürüm olan sürüm adayı.
NuGet, sürümleri önceliğe göre sıralarken SemVer standardını izler ve önce soneki olmayan bir sürüm seçer, ardından yayın öncesi sürümlere ters alfabetik sırada öncelik uygular ve noktalı gösterim sayılarını sayısal düzende ele alır.
Not
1.0.1-build.23'de olduğu gibi, nokta gösterimiyle yayın öncesi sayılar, SemVer 2.0.0 standardının bir parçası olarak kabul edilir ve bu nedenle yalnızca NuGet 4.3.0+ile desteklenir.
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
1.0.1-alfa10'un tamamen ters alfabetik düzende sıralandığını, 1.0.1-rc.10'un ise 1.0.1-rc.2'den daha öncelikli olduğunu unutmayın.
Sürüm aralıkları
NuGet, paket bağımlılıklarına başvururken sürüm aralıklarını belirtmek için aralık gösteriminin kullanılmasını destekler ve aşağıdaki gibi özetlenir:
Gösterim | Uygulanan kural | Açıklama |
---|---|---|
1.0 | x ≥ 1.0 | En düşük sürüm, dahil |
[1.0,) | x ≥ 1.0 | En düşük sürüm, dahil |
(1.0,) | x > 1.0 | En düşük sürüm, özel |
[1.0] | x == 1,0 | Tam sürüm eşleşmesi |
(,1.0] | x ≤ 1.0 | En yüksek sürüm( dahil) |
(,1.0) | x < 1.0 | En yüksek sürüm, özel |
[1.0,2.0] | 1,0 ≤ x ≤ 2,0 | Tam aralık, dahil |
(1.0,2.0) | 1.0 < x < 2.0 | Tam aralık, özel |
[1.0,2.0) | 1.0 ≤ x < 2.0 | Karma kapsayıcı minimum ve özel maksimum sürüm |
(1.0) | Geçersiz | Geçersiz |
En İyi Yöntem
Proje dosyaları, packages.config
dosyaları ve .nuspec
dosyalarındaki paket bağımlılıkları için her zaman bir sürüm veya sürüm aralığı belirtin. Sürüm veya sürüm aralığı olmadan, bir bağımlılığı çözerken tutarlı geri yükleme sonuçları garanti edilmez.
Bir uyumluluk sorunu bilmiyorsanız sahip olmadığınız paketler için sürüm aralıklarına üst sınır belirtmekten kaçının. Sürüm aralıklarının üst sınırları benimsemeye zarar verir, tüketicileri bağımlılıklara değerli güncelleştirmeler almaktan caydırabilir ve bazı durumlarda bağımlılıkların desteklenmeyen sürümlerini kullanmalarına neden olabilir.
Proje dosyalarındaki başvurular (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 only version 6.1.0. -->
<PackageReference Include="ExamplePackage" Version="[6.1.0]" />
<!-- 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)" />
packages.config
Başvuruları:
packages.config
'de her bağımlılık, paketleri geri yüklerken kullanılan tam bir version
özniteliğiyle listelenir.
allowedVersions
özniteliği yalnızca güncelleştirme işlemleri sırasında paketin güncelleştirilebileceği sürümleri kısıtlamak için kullanılır.
<!-- 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)" />
.nuspec
dosyalarındaki Başvuruları
<dependency>
öğesindeki version
özniteliği, bağımlılık için kabul edilebilir aralık sürümlerini açıklar.
<!-- 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)" />
Normalleştirilmiş sürüm numaraları
Not
Bu, NuGet 3.4+ için hataya neden olan bir değişikliktir.
Yükleme, yeniden yükleme veya geri yükleme işlemleri sırasında bir depodan paket alırken NuGet 3.4+ sürüm numaralarını aşağıdaki gibi ele alır:
Baştaki sıfırlar sürüm numaralarından kaldırılır:
- 1,00, 1,0 olarak değerlendirilir
- 1.01.1, 1.1.1 olarak değerlendirilir
- 1.00.0.1, 1.0.0.1 olarak değerlendirilir
Sürüm numarasının dördüncü bölümünde sıfır atlanır
- 1.0.0.0, 1.0.0 olarak değerlendirilir
- 1.0.01.0, 1.0.1 olarak değerlendirilir
SemVer 2.0.0 derleme meta verileri kaldırıldı
- 1.0.7+r3456 1.0.7 olarak değerlendirilir
pack
ve restore
işlemleri, mümkün olduğunda sürümleri normalleştirir. Bu normalleştirme, önceden oluşturulmuş paketler için paketlerdeki sürüm numaralarını etkilemez; yalnızca bağımlılıkları çözerken NuGet'in sürümlerle nasıl eşleştiği etkiler.
Ancak NuGet paket depoları, paket sürümünün yinelenmesini önlemek için bu değerleri NuGet ile aynı şekilde ele almalıdır. Bu nedenle bir paketin sürüm
Anlamsal Sürüm Oluşturma 2.0.0
Eski istemcilerde SemVer v2.0.0'ın belirli semantiği desteklenmez. NuGet, aşağıdaki deyimlerden biri doğruysa bir paket sürümünü SemVer v2.0.0'a özgü olarak değerlendirir:
- Yayın öncesi etiketi noktayla ayrılmıştır, örneğin 1.0.0-alpha.1
- Sürümde derleme meta verileri vardır, örneğin 1.0.0+githash
nuget.org için, aşağıdaki deyimlerden biri doğruysa bir paket SemVer v2.0.0 paketi olarak tanımlanır:
- Paketin kendi sürümü, yukarıda açıklandığı gibi SemVer v2.0.0 uyumlu ancak SemVer v1.0.0 uyumlu değildir.
- Paketin bağımlılık sürüm aralıklarından herhangi birinin, yukarıda tanımlanan SemVer v2.0.0 uyumlu ancak SemVer v1.0.0 uyumlu olmayan en düşük veya en yüksek sürümü vardır; örneğin, [1.0.0-alpha.1, ).
SemVer v2.0.0'a özgü bir paketi nuget.org yüklerseniz, paket eski istemciler tarafından görünmez ve yalnızca aşağıdaki NuGet istemcileri tarafından kullanılabilir:
- NuGet 4.3.0+
- Visual Studio 2017 sürüm 15.3+
- NuGet VSIX v3.6.0 ile Visual Studio 2015
- .NET SDK 2.0.0+
Üçüncü taraf istemciler:
- JetBrains Rider
- Paket sürüm 5.0+
NuGetVersion'ın AnlamSal Sürüm Oluşturma'dan ayrıştığı yerler
NuGet paket sürümlerini programlı olarak kullanmak istiyorsanız, NuGet.Versioningpaketini NuGetVersion.Parse(string)
sürüm dizelerini ayrıştırmak için kullanılabilir ve VersionComparer
NuGetVersion
örnekleri sıralamak için kullanılabilir.
NuGet işlevselliğini .NET üzerinde çalışmayan bir dilde uyguluyorsanız, NuGetVersion
ile AnlamSal Sürüm Oluşturma arasındaki farkların bilinen listesi ve mevcut AnlamSal Sürüm Oluşturma kitaplığının nuget.org'da yayımlanmış paketler için çalışmama nedenleri aşağıdadır.
-
NuGetVersion
, ile uyumlu olması içinRevision
4. sürüm segmentini veyaSystem.Version
üst kümesini destekler. Bu nedenle, ön sürüm ve meta veri etiketleri hariç, bir sürüm dizesiMajor.Minor.Patch.Revision
. Yukarıda açıklanan sürüm normalleştirmesine göre,Revision
sıfırsa, normalleştirilmiş sürüm dizesinden atlanır. -
NuGetVersion
yalnızca ana kesimin tanımlanmasını gerektirir. Diğerleri isteğe bağlıdır ve sıfıra eşdeğerdir. Bu,1
,1.0
,1.0.0
ve1.0.0.0
kabul edildiği ve eşit olduğu anlamına gelir. -
NuGetVersion
yayın öncesi bileşenler için büyük/küçük harfe duyarsız dize karşılaştırmaları kullanır. Bu,1.0.0-alpha
ve1.0.0-Alpha
eşit olduğu anlamına gelir.