.NET projenizde bağımlılık güncelleştirmelerini yönetme
Er ya da geç, kitaplığın yeni bir sürümüne güncelleştirmek istiyorsunuz. İşlev kullanım dışı olarak işaretlenmiş olabilir veya kullanmakta olduğunuz paketin sonraki bir sürümünde yeni bir özellik olabilir.
Bir kitaplığı güncelleştirmeyi denemeden önce aşağıdaki noktaları göz önünde bulundurun:
- Güncelleştirme türü: Hangi güncelleştirme türü kullanılabilir? Küçük bir hata düzeltmesi mi? İhtiyacınız olan yeni bir özellik mi eklenmiş? Kodunuzu bozar mı? Güncelleştirme türünü iletmek için anlamsal sürüm oluşturma adı verilen sistemden faydalanabilirsiniz. Kitaplığın sürüm numarasının ifade şekli, geliştiricilere işlem yaptıkları güncelleştirme türünü iletir.
- Projenin doğru yapılandırılıp yapılandırılmadığı: .NET projenizi yalnızca istediğiniz güncelleştirme türlerini alacak şekilde yapılandırabilirsiniz. Bir güncelleştirmeyi yalnızca belirli bir güncelleştirme türü kullanılabiliyorsa gerçekleştirirsiniz. Sürprizlerle karşılaşabileceğinizi riske atmadığınızdan bu yaklaşımı öneririz.
- Güvenlik sorunları: Proje bağımlılıklarınızı zaman içinde yönetmek, olabilecek sorunların farkında olmayı içerir. Örneğin, güvenlik açıkları algılandığında sorunlar oluşur. İdeal olarak, indirebileceğiniz düzeltme ekleri yayınlanabilir. .NET Core aracı, kitaplıklarınızda denetim gerçekleştirerek güncelleştirilmesi gereken paketler olup olmadığını belirlemenize yardımcı olur. Ayrıca sorunu gidermek için uygun eylemi gerçekleştirme konusunda da destek sağlar.
Anlamsal sürüm oluşturma özelliğini kullanma
Anlamsal sürüm oluşturma adlı bir endüstri standardı vardır. Bu, sizin veya başka bir geliştiricinin bir kitaplığa tanıttığınız değişiklik türünü ifade etme yöntemidir. Anlamsal sürüm oluşturma, bir paketin sürüm numarasına sahip olduğundan ve sürüm numarasının şu bölümlere ayrıldığından emin olarak çalışır:
-
Ana sürüm: En soldaki sayı. Örneğin, içindeki şeklindedir
11.0.0. Bu sayıdaki bir değişiklik, kodunuzda "hataya neden olan değişiklikler" bekleyebileceğiniz anlamına gelir. Kodunuzun bir bölümünü yeniden yazmanız gerekebilir. -
İkincil sürüm: Ortadaki sayı. Örneğin, içindeki şeklindedir
21.2.0. Bu numarada yapılan bir değişiklik, özelliklerin eklendiği anlamına gelir. Kodunuz çalışmaya devam etmelidir. Genellikle güncelleştirmeyi kabul etmek güvenlidir. -
Düzeltme eki sürümü: En sağdaki sayıdır. Örneğin, içindeki şeklindedir
31.2.3. Bu sayıdaki bir değişiklik, kodda çalışması gereken bir şeyi düzelten bir değişikliğin uygulandığı anlamına gelir. Bu tür güncelleştirmeleri kabul etmek güvenli olmalıdır.
Bu tabloda sürüm numarasının her bir sürüm türü için nasıl değiştiği gösterilmektedir:
| Tür | Ne olur |
|---|---|
| Ana sürüm |
1.0.0 değişiklikleri 2.0.0 |
| İkincil sürüm |
1.1.1 değişiklikleri 1.2.0 |
| Düzeltme eki sürümü |
1.0.1 değişiklikleri 1.0.2 |
Birçok şirket ve geliştirici bu sistemi kullanıyor. Paketleri yayımlamak ve NuGet kayıt defterine göndermek istiyorsanız anlamsal sürüm oluşturma adımlarını izlemeniz beklenir. Yanızca NuGet kayıt defterinden paketleri indiriyor olsanız bile bu paketlerin anlamsal sürüm oluşturmaya uygun olması gerekir.
Bir pakette değişiklik yapmak, bir hatanın işinize zarar vermesi riski de dahil olmak üzere riskler oluşturabilir. Bazı riskler kodunuzun bir kısmını yeniden yazmanızı gerektirebilir. Kodu yeniden yazmak, zaman alan ve maliyetli bir süreçtir.
Güncelleştirme yaklaşımı
.NET geliştiricisi olarak, istediğiniz güncelleştirme davranışını .NET'e iletebilirsiniz. Güncelleştirmeyi risk açısından değerlendirin. Bu konuyla ilgili yaklaşımlar aşağıda verilmiştir:
- Ana sürüm: Çıkar çıkmaz en son ana sürüme güncelleştirme konusunda sorun yok. Benim ucumda kodu değiştirmem gerekebileceği gerçeğini kabul ediyorum.
- İkincil sürüm: Yeni bir özelliğin eklenmesiyle ilgili bir sorun yok. Kodda hataya neden olmasını istemiyorum.
- Düzeltme eki sürümü: İyi olduğum tek güncelleştirmeler hata düzeltmeleridir.
Yeni veya küçük ölçekli bir .NET projesini yönetiyorsanız güncelleştirme stratejisini belirleme konusunda esneklik gösterebilirsiniz. Örneğin, her zaman en son sürüme güncelleştirebilirsiniz. Daha karmaşık projelerde daha fazla ayrıntı vardır ama bu konuyu gelecekteki bir modülde ele alacağız.
Genel olarak, güncelleştirdiğiniz bağımlılık ne kadar küçük olursa, bağımlılık sayısı o kadar az olur ve güncelleştirme işleminin kolay olma olasılığı o kadar artar.
Proje dosyasını güncelleştirme için yapılandırma
Bir veya daha fazla bağımlılık eklerken, projenizi geri yüklerken, oluştururken veya çalıştırırken tahmin edilebilir davranışlar elde etmek için proje dosyanızı yapılandırın. Bir paket için hangi yaklaşımı benimsemek istediğinizi bildirebilirsiniz. NuGet, sürüm aralıkları ve kayan sürüm kavramlarına sahiptir.
Sürüm aralıkları, çözümlemek istediğiniz belirli bir sürüm aralığını belirtmek için kullanabileceğiniz özel bir gösterimidir.
| 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 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 |
NuGet ayrıca sayının ana, ikincil, düzeltme eki ve yayın öncesi sonek bölümleri için kayan sürüm gösterimi kullanmayı da destekler. Bu notasyon bir yıldız işareti (*) şeklindedir. Örneğin, sürüm belirtimi 6.0.* "en son 6.0.x sürümünü kullan" diyor. Başka bir örnekte 4.* "en son 4.x sürümünü kullan" anlamına gelir. Kayan sürümün kullanılması, bir bağımlılığın en son sürümüyle güncelliğini korurken proje dosyasındaki değişiklikleri azaltır.
Not
Kayan gösterimleri kullanmak yerine belirli bir sürümü yüklemeniz önerilir. Belirli bir sürümü yüklemek, açıkça bir bağımlılık güncelleştirmesi istemediğiniz sürece derlemelerinizin yinelenebilir olmasını sağlar.
Bir kayan sürüm kullanırken NuGet, bir paketin sürüm deseniyle eşleşen en son sürümünü çözümler. Aşağıdaki örnekte 6.0.* bir paketin 6.0 ile başlayan en son sürümünü alır. Bu sürüm 6.0.1’dir.
Aşağıda ana, ikincil veya yama sürümü için yapılandırabileceğiniz bazı örnekler verilmiştir:
<!-- 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)" />
Güncel olmayan paketleri bulma ve güncelleştirme
dotnet list package --outdated komutu güncel olmayan paketleri listeler. Bu komut, kullanılabilir paketlerin daha yeni sürümlerinin mevcut olup olmadığını öğrenmenize yardımcı olabilir. Komutun tipik bir çıktısı aşağıda verilmiştir:
Top-level Package Requested Resolved Latest
> Humanizer 2.7.* 2.7.9 2.8.26
Çıktıdaki sütunların adlarının anlamları aşağıda verilmiştir:
-
Requested: Belirttiğiniz sürüm veya sürüm aralığı. -
Resolved: Proje için indirilen ve belirtilen sürümle eşleşen gerçek sürüm. -
Latest: NuGet'ten güncelleştirme için kullanılabilen en son sürüm.
Önerilen iş akışı aşağıdaki komutları şu sırayla çalıştırmaktır:
-
dotnet list package --outdated'i çalıştırın. Bu komut güncel olmayan tüm paketleri listeler.Requested,ResolvedveLatestsütunlarında bilgi sunar. -
dotnet add package <package name>'i çalıştırın. Bu komutu çalıştırırsanız, en son sürüme güncelleştirmeyi dener. İsteğe bağlı olarak--version=<version number/range>geçirebilirsiniz.