Nuspec में विशिष्ट निर्भरता संस्करण कैसे निर्दिष्ट करें?


83

मैं अपना पहला नगेट पैकेज बना रहा हूं। मैंने एक संस्करण के साथ एक निर्भरता जोड़ी जो नवीनतम संस्करण नहीं है। हालाँकि, मैं इस निर्भरता के नवीनतम संस्करण में अपडेट नहीं करना चाहता। क्या विशिष्ट संस्करण का उपयोग करने के लिए निर्देश देना संभव है?

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

जब मैं पैकेज देखता हूं तो मुझे यह दिखाई देता है:

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

जब मैं पैकेज स्थापित करता है तो यह निम्नलिखित बनाता है।

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

मैं वास्तव में कुछ इस तरह देखना चाहता हूँ: निर्भरता को हल करने का प्रयास 'NHibernate (3.2.0.3001)'।


5
आप नीचे बताए अनुसार ऐसा कर सकते हैं। लेकिन ध्यान रखें कि जो कोई भी आपके पैकेज का उपयोग करता है और NHibernate का उपयोग करता है, (या किसी अन्य निर्भरता जहां आपने सटीक पैकेज संस्करण निर्दिष्ट किया है) तब किसी भी कारण से इसे अपडेट नहीं कर सकते जब तक कि आप उन्हें न दें। यह खराब स्थिति है। हाल ही में एक "लॉक्ड वर्जन" हमें मिला: हमारे मामले में संस्करण-लॉक पैकेज NHib नहीं था, बल्कि एक असंबंधित पैकेज था। लॉकिंग संस्करण आवश्यक हो सकता है यदि एक अपस्ट्रीम लाइब्रेरी में वास्तविक ब्रेकिंग परिवर्तन हो, लेकिन हमारे मामले में जो हमारे पास नहीं थे; इस सिंटैक्स का अति प्रयोग। इसलिए यदि आप इसका उपयोग करते हैं, तो सावधानी के साथ इसका उपयोग करें!
एंथनी

जवाबों:


131

आपको कोष्ठक के साथ एक सटीक संस्करण बनाने में सक्षम होना चाहिए:

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

आपके द्वारा उपयोग किए जा सकने वाले स्वरूपों की पूरी जानकारी NuGet साइट पर है, यहाँ हैं:

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


मुझे नहीं पता कि मैंने उस पृष्ठ को कैसे खोजा! धन्यवाद।
देवत्व

1
तुम यह केर सकते हो। लेकिन ध्यान रखें कि जो कोई भी आपके पैकेज का उपयोग करता है और NHibernate का भी उपयोग करता है, तो आप किसी भी कारण से NHibernate को अपडेट नहीं कर सकते, जब तक कि आप उन्हें न दें। यह मामलों की एक महान स्थिति नहीं है।
एंथनी

3
@ मुझे लगता है कि यह टिप्पणी इस सवाल पर बेहतर है कि मेरा जवाब; मैं सिर्फ यह दिखा रहा था कि इसे कैसे करना है, न कि इसकी वकालत करना। आपके द्वारा वर्णित समस्या हालांकि आसानी से हल नहीं होती है; यदि आपके पास दो बहुत सारे कोड हैं जो केवल NH के एक ही संस्करण (बग्स, एपीआई अंतर, जो भी हो) के काम नहीं करते हैं, तो आप पहले से ही खराब हैं। वास्तविक निर्धारण निजी निर्भरताएँ हैं (जैसे कि नोड के पास), लेकिन मैं .NET को कभी भी इसके लिए "उचित" समर्थन प्राप्त नहीं कर सकता :(
डैनी टुप्पेनी

1
हां, मैं सहमत हूं और टिप्पणी को फिर से संलग्न करूंगा। स्पष्ट होने के लिए, एक "लॉक किया गया संस्करण" हमें हाल ही में सा है इसलिए यह मेरे दिमाग में ताज़ा है। हमारे मामले में संस्करण-लॉक पैकेज NHib नहीं था, बल्कि पूरी तरह से असंबंधित पैकेज था। यदि लाइब्रेरी में वास्तविक ब्रेकिंग परिवर्तन हैं, तो लॉकिंग संस्करण आवश्यक हो सकता है, लेकिन हमारे मामले में कि हम वहां नहीं थे; इस सिंटैक्स का अति प्रयोग। इसलिए सावधानी से इसका उपयोग करें!
एंथनी


2

उपयोगकर्ता की ओर से, आप package.config में अनुमत अनुमति निर्दिष्ट करके उन्नयन को बाधित कर सकते हैं। http://docs.nuget.org/docs/reference/versioning#Constraining_Upgrades_To_Allowed_Versions


1
आज के रूप में, संदर्भ docs.microsoft.com/en-us/nuget/create-packages/…
superjos

2

के अनुसार http://nuget.codeplex.com/wikipage?title=Dependency%20Resolution और अन्य स्रोतों, बस कम के रूप में बाध्य को निर्दिष्ट

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

उस संस्करण से मेल खाते सबसे कम प्रमुख / मामूली संस्करण के उच्चतम संशोधन / पैच स्तर का परिणाम होगा।

जब तक मैं प्रलेखन को पूरी तरह से गलत नहीं समझ लेता, यह उच्चतम 3.2 से मेल खाएगा। * संस्करण लेकिन 3.3 नहीं। * या उससे अधिक संस्करण जब तक कोई 3.2 नहीं। * संस्करण नहीं मिल सकता।

यदि कोई कारण है कि 3.2.0.3001 एकमात्र संस्करण है जिसके खिलाफ आप निर्भर होना चाहते हैं, तो आप पा सकते हैं कि आपका पैकेज अन्य पैकेजों के अनुकूल नहीं है, जो उदाहरण के लिए NHibernate पर भी निर्भर करता है क्योंकि अन्य पैकेज NHibernate पर निर्भर है [3.2.0.1002] , 3.3) जिसका अर्थ है कम से कम 3.2.0.3002 लेकिन 3.3 से कम।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.