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 üzerinde Entity Framework'te sürüm 4.1.10311'den sürüm 6.1.3'e(en son kararlı sürüm) ve 6.2.0-beta1 gibi ç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. Eski istemcilerde SemVer v2.0.0'ın belirli semantiği desteklenmez.

Bu konuda:

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:

  • Önemli: Hataya neden olan değişiklikler
  • İkincil: Yeni özellikler, ancak geriye dönük uyumlu
  • Yama: Yalnızca geriye dönük uyumlu hata düzeltmeleri
  • -Sonek (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).

Örnekler:

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 veya proje dosyasında belirtilmelidir .nuspec .

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 çalışma 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 sürümünde olduğu gibi noktalı ön sürüm sayıları SemVer 2.0.0 standardının bir parçasıdır 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, belirtilen değerler dahil
[1.0,) x ≥ 1.0 En düşük sürüm, belirtilen değerler dahil
(1.0,) x > 1.0 En düşük sürüm, belirtilen değerler hariç
[1.0] x == 1.0 Tam sürüm eşleşmesi
(,1.0] x ≤ 1.0 En yüksek sürüm, belirtilen değerler dahil
(,1.0) x < 1.0 En yüksek sürüm, belirtilen değerler hariç
[1.0,2.0] 1.0 ≤ x ≤ 2.0 Tam aralık, belirtilen değerler dahil
(1.0,2.0) 1,0 < x < 2,0 Tam aralık, belirtilen değerler hariç
[1.0,2.0) 1,0 ≤ x < 2,0 En düşük (belirtilen değerler dahil) ve en yüksek (belirtilen değerler hariç) sürümlerin karması
(1.0) geçersiz geçersiz

Örnekler

Proje dosyaları, packages.config dosyaları ve dosyalarındaki paket bağımlılıkları için her zaman bir sürüm veya .nuspec sürüm aralığı belirtin. Sürüm veya sürüm aralığı olmadan, NuGet 2.8.x ve önceki sürümler bir bağımlılığı çözerken kullanılabilir en son paket sürümünü seçerken, NuGet 3.x ve üzeri en düşük paket sürümünü seçer. Bir sürüm veya sürüm aralığı belirtmek bu belirsizliği önler.

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 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)" />

içindeki packages.configbaşvurular:

içinde packages.configher bağımlılık, paketleri geri yüklerken kullanılan tam version bir öznitelikle 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)" />

Dosyalardaki .nuspec başvurular

version öğesindeki <dependency> özniteliği, bir 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 1.0 sürümünü içeren bir depo, ayrı ve farklı bir paket olarak sürüm 1.0.0'ı barındırmamalıdır.

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-alfa.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-alfa.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.Versioning paketini kullanmanız kesinlikle önerilir. Statik yöntem NuGetVersion.Parse(string) , sürüm dizelerini ayrıştırmak için kullanılabilir ve VersionComparer örnekleri sıralamak NuGetVersion için kullanılabilir.

NuGet işlevselliğini .NET üzerinde çalışmayan bir dilde uyguluyorsanız, ve AnlamSal Sürüm Oluşturma arasındaki NuGetVersion farkların bilinen listesi ve mevcut AnlamSal Sürüm Oluşturma kitaplığının nuget.org'de yayımlanmış paketler için çalışmama nedenleri aşağıdadır.

  1. NuGetVersion ile uyumlu olması için 4. sürüm segmentini Revision, veya bir üst kümesini System.Versiondestekler. Bu nedenle, yayın öncesi ve meta veri etiketleri hariç bir sürüm dizesidir Major.Minor.Patch.Revision. Yukarıda açıklanan sürüm normalleştirmesine göre sıfırsa Revision , normalleştirilmiş sürüm dizesinden atlanır.
  2. 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.0, 1.0.0ve 1.0.0.0 tüm kabul edilir ve eşittir anlamına gelir1.
  3. NuGetVersion yayın öncesi bileşenler için büyük/küçük harfe duyarsız dize karşılaştırmalarını kullanır. Bu, ve'nin 1.0.0-alpha1.0.0-Alpha eşit olduğu anlamına gelir.