2011-10-14 20 views
65

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

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

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

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

जब मैं पैकेज स्थापित मैं इस को देखते हैं। निर्भरता 'NHibernate (3.2.0.3001)' समाधान करने का प्रयास:

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

मैं वास्तव में कुछ इस तरह देखना चाहते हैं।

+3

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

उत्तर

96

आप कोष्ठक के साथ एक सही संस्करण के लिए मजबूर करने में सक्षम होना चाहिए: यहाँ, NuGet साइट पर

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

स्वरूपों पर पूर्ण जानकारी आप उपयोग कर सकते हैं:

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

+0

मुझे नहीं पता कि मुझे वह पृष्ठ कैसे नहीं मिला! धन्यवाद। – devlife

+0

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

+0

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

2

से उपयोगकर्ता पक्ष, आप संकुल.कॉन्फिग में अनुमत वर्जन निर्दिष्ट करके अपग्रेड को बाधित कर सकते हैं। http://docs.nuget.org/docs/reference/versioning#Constraining_Upgrades_To_Allowed_Versions

+1

आज के रूप में, संदर्भ को https://docs.microsoft.com/en-us/nuget/create-packages/dependency-versions में बदल दिया गया है # संस्करण पर्वतमाला – 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 एकमात्र संस्करण है जिसके खिलाफ आप निर्भर होना चाहते हैं, तो आप पाएंगे कि आपका पैकेज अन्य पैकेजों के साथ संगत नहीं है जो उदाहरण के लिए एनएचबीरनेट पर निर्भर करता है क्योंकि दूसरा पैकेज एनएचबेरनेट पर निर्भर करता है [3.2.0.3002,3.3) जिसका अर्थ है कम से कम 3.2.0.3002 लेकिन 3.3 से कम।

संबंधित मुद्दे