2014-04-30 11 views
6

तो मेरे पास एक पैकेज है, NServiceBus.Host जो NServiceBus> = 4.5.0 पर निर्भर करता है।NuGet पैकेज निर्भरता के गलत संस्करण को हल करता है

nuget पर NServiceBus का 4.5.1 संस्करण है। जब मैं-पैकेज स्थापित NServiceBus.Host मैं:

PM> install-package nservicebus.host 
Attempting to resolve dependency 'NServiceBus (≥ 4.5.0)'. 
Attempting to resolve dependency 'NServiceBus.Interfaces (≥ 4.5.0)'. 
Installing 'NServiceBus.Interfaces 4.5.0'. 
You are downloading NServiceBus.Interfaces from NServiceBus Ltd, the license agreement to which is available at http://particular.net/LicenseAgreement. Check the package for additional dependencies, which may come with their own license agreement(s). Your use of the package and dependencies constitutes your acceptance of their license agreements. If you do not accept the license agreement(s), then delete the relevant components from your device. 
Successfully installed 'NServiceBus.Interfaces 4.5.0'. 
Installing 'NServiceBus 4.5.0'. 

आप देख सकते हैं मैं निर्भरता के 4.5.0 संस्करण मिलता है।

nuget doco में यह कहा गया है: निर्भरता स्थापित नहीं है

हैं, NuGet निम्नलिखित चरणों के माध्यम से चला जाता है:

NuGet फ़ीड उस संस्करण विनिर्देश भीतर है भीतर Subkismet के हर संस्करण विश्लेषण करता है । NuGet तब संकुचित करता है जो सबसे कम मेजर/माइनर संस्करण वाले पैकेजों को केवल पर सेट करता है। शेष पैकेजों में से, NuGet उच्चतम संस्करण संख्या वाला एक चुनता है।

"NuGet उच्चतम संस्करण संख्या वाला एक चुनता है।" ऐसा लगता है कि यहां कभी भी संस्करण नहीं है।

क्या यह NuGet में एक बग है?

+0

जब आप प्रलेखन का हिस्सा requoted अगर आपके अंत से पहले पैरा एक सा याद किया: "शेष संकुल * के *, NuGet उच्चतम संस्करण संख्या के साथ एक उठाता है" - एक उच्च संस्करण संख्या में हो सकता है NuGet भंडार में, लेकिन यह आपके पैकेज या इसकी निर्भरताओं द्वारा संदर्भित उच्चतम संख्या नहीं है। –

+0

लेकिन इस मामले में शेष पैकेज के उस सेट में 4.5.0 और 4.5.1 दोनों शामिल किए जाने चाहिए? –

उत्तर

9

निर्भरता संकल्प पर NuGet प्रलेखन उल्लेख दिसम्बर 2010 के बाद से अपडेट नहीं किया गया करने के लिए वास्तविक NuGet डॉक्स यहां उपलब्ध हैं: https://docs.nuget.org

इसके अलावा, NuGet जाएगा - डिफ़ॉल्ट रूप से - सबसे कम MAJOR.MINOR संस्करण हल पैकेज निर्भरताओं में परिभाषित सीमा के भीतर अनुमति दी गई है। तो 4.5.0 एक सही डिफ़ॉल्ट निर्भरता संकल्प है।

न्यू NuGet v2.8.1 के बाद से: आप एक वैकल्पिक निर्भरता संकल्प NuGet पैकेज प्रबंधक कंसोल का उपयोग कर एल्गोरिथ्म का उपयोग कर सकते हैं:

स्थापित-पैकेज NServiceBus.Host -DependencyVersion HighestPatch

वहाँ अधिक कर रहे हैं विकल्प, यहां दस्तावेज़ों की जांच करें: https://docs.nuget.org/docs/reference/package-manager-console-powershell-reference#Install-Package

+0

धन्यवाद, क्या हम उम्मीद कर सकते हैं कि उच्चतम पैच भविष्य में डिफ़ॉल्ट रणनीति बन जाए? –

+0

क्या वे सिर्फ codeplex दस्तावेज को हटा सकते हैं? –

+0

क्या आप इसे केवल पावरहेल के साथ निर्दिष्ट कर सकते हैं? मैं नियमित कमांड प्रॉम्प्ट पर विकल्प नहीं देखता हूं। –

3

जैसा कि जेवियर ने उल्लेख किया है कि यह डिफ़ॉल्ट व्यवहार प्रतीत होता है। हालांकि, प्रलेखन का कहना है कि आप nuget कॉन्फ़िगरेशन को संपादित करके डिफ़ॉल्ट व्यवहार बदल सकते हैं:

मान्य निर्भरता पैकेज की सूची से चयनित निर्भरता पैकेज का संस्करण निर्दिष्ट करता है। अपमान मूल्य सबसे कम है। आप nuget.config फ़ाइल में एक नया डिफ़ॉल्ट मान निर्दिष्ट करके इस डिफ़ॉल्ट मान ओवरराइड कर सकते हैं:

दस्तावेज़ में वर्णित
<configuration> 
    <config> 
     <add key="DependencyVersion" value="HighestPatch" /> 
    </config> 
</configuration> 

मैं अपने विन्यास फाइल संपादित:

%AppData%\Nuget\NuGet.Config 

यह तो PowerShell में काम करता है लेकिन एक नियमित कमांड प्रॉम्प्ट में नहीं।

डॉक्स भी कहते हैं:

क्या अजीब बात है डॉक्स का कहना है कि यह है कि पूर्व 2.7.2 डिफ़ॉल्ट था HighestPatch है ...

ध्यान दें कि NuGet 2.7.2 के लिए या इससे पहले, डिफ़ॉल्ट मान HighestPatch है, और इसे बदला नहीं जा सकता है।

2.8 के रिलीज नोट्स व्यवहार में परिवर्तन का उल्लेख करते हैं और कारण के लिए पैकेज स्थापित करने के कारण समय के साथ लगातार निर्भरता संकल्प परिणाम होता है।

https://docs.nuget.org/docs/release-notes/nuget-2.8

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