Nuspec'te belirli bir bağımlılık sürümü nasıl belirtilir?


83

İlk nuget paketimi oluşturuyorum. En son sürüm olmayan bir sürüme sahip bir bağımlılık ekledim. Ancak, bu bağımlılığın en son sürümüne güncelleme yapmak istemiyorum. Belirli sürümü kullanma talimatı vermek mümkün mü?

<dependencies>
  <dependency id="NHibernate" version="3.2.0.3001" />
</dependencies>

Paketi kurduğumda şunu görüyorum:

Attempting to resolve dependency 'NHibernate (≥ 3.2.0.3001)'.

Bu, paketi kurduğumda aşağıdakileri oluşturur.

<packages>
  <package id="Iesi.Collections" version="3.2.0.4000" />
  <package id="NHibernate" version="3.2.0.4000" />
</packages>

Gerçekten böyle bir şey görmek isterim: Bağımlılığı 'NHibernate (3.2.0.3001)' çözmeye çalışmak.


5
Bunu aşağıda cevaplandığı şekilde yapabilirsiniz. Ancak paketinizi kullanan ve aynı zamanda NHibernate (veya tam paket sürümünü belirttiğiniz başka bir bağımlılık) kullanan herhangi birinin, izin vermediğiniz sürece bunu herhangi bir nedenle güncelleyemeyeceğini unutmayın. Bu kötü bir durum. Son zamanlarda "kilitli sürüm" bizi ısırdı: Bizim durumumuzda sürüm kilitli paket NHib değil, ilgisiz bir paketti. Bir yukarı akış kitaplığında gerçek kırılma değişiklikleri varsa, sürümün kilitlenmesi gerekli olabilir, ancak bizim durumumuzda yoktu; sadece bu sözdiziminin aşırı kullanımı. Bu yüzden eğer kullanırsanız, dikkatli kullanın!
Anthony

Yanıtlar:


131

Parantezlerle tam bir sürümü zorlayabilmelisiniz:

<dependency id="NHibernate" version="[3.2.0.3001]" />

Kullanabileceğiniz biçimlerle ilgili tam bilgi NuGet sitesinde yer almaktadır:

http://docs.nuget.org/docs/reference/version-range-specification


O sayfayı nasıl bulamadım bilmiyorum! Teşekkürler.
devlife

1
Bunu yapabilirsiniz. Ancak paketinizi kullanan ve ayrıca NHibernate kullanan herhangi birinin, siz izin vermedikçe herhangi bir nedenle NHibernate'i güncelleyemeyeceğini unutmayın. Bu harika bir durum değil.
Anthony

3
@Anthony Bu yorumun cevabımın sorusu üzerine daha iyi olduğunu düşünüyorum; Sadece nasıl yapılacağını gösteriyordum, savunmuyordum. Yine de tarif ettiğiniz problem kolayca çözülemez; NH'nin aynı sürümünde çalışmayan iki çok kodunuz varsa (hatalar, API farklılıkları, her neyse), o zaman zaten mahvolmuşsunuzdur. Gerçek düzeltme özel bağımlılıklar (Node'un sahip olduğu gibi), ancak .NET'in bunun için "uygun" destek aldığını
göremiyorum

1
Evet, kabul ediyorum ve yorumu yeniden ekleyeceğim. Açık olmak gerekirse, son zamanlarda "kilitli bir sürüm" bizi ısırdı, bu yüzden aklımda taze. Bizim durumumuzda sürüm kilitli paket NHib değil, tamamen alakasız bir paketti. Bir kitaplıkta gerçek kırılma değişiklikleri varsa, sürümün kilitlenmesi gerekebilir, ancak bizim durumumuzda yoktu; sadece bu sözdiziminin aşırı kullanımı. Bu yüzden dikkatli kullanın!
Anthony



2

Göre http://nuget.codeplex.com/wikipage?title=Dependency%20Resolution ve diğer kaynaklardan, sadece alt şekilde bağlanan belirtme

<dependencies>
  <dependency id="NHibernate" version="3.2.0.3001" />
</dependencies>

o sürümle eşleşen en düşük ana / ikincil sürümün en yüksek revizyon / yama düzeyiyle sonuçlanır.

Belgeleri tamamen yanlış anlamazsam, bu en yüksek 3.2. * Sürümüyle eşleşir ancak 3.2. * Sürümü bulunamazsa 3.3. * Veya daha yüksek sürümlerle eşleşmez.

3.2.0.3001'in bağımlı olmak isteyeceğiniz tek sürüm olmasının bir nedeni varsa, paketinizin diğer paketlerle uyumlu olmadığını görebilirsiniz, örneğin diğer paket NHibernate [3.2.0.3002'ye bağlı olduğundan, NHibernate'e de bağlıdır. , 3.3) bu, en az 3.2.0.3002, ancak 3.3'ten düşük anlamına gelir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.