2013-02-04 52 views
12

आज पैकेज को इंस्टॉल करते समय मुझे NuGet के अजीब व्यवहार का सामना करना पड़ा।NuGet कैसे तय करता है कि स्थानीय पैकेज कैश का उपयोग करना है या नहीं?

एक संक्षिप्त विवरण: मेरी बिल्ड स्क्रिप्ट के परिणामस्वरूप एक NuGet पैकेज है। मैं हर बार संस्करण नहीं बदलता, इसलिए प्रत्येक बिल्ड MyPackage.1.0.0.nupkg उत्पन्न करता है। निर्माण के अंतिम चरण के रूप में, मैंने पैकेज को स्थानीय नेटवर्क के अंदर तैनात NuGet सर्वर पर धक्का दिया।

अब, एक अलग मशीन पर, मैं nuget install MyPackage -Source http://myserver/nuget, जो स्पष्ट रूप से NuGet पैकेज को स्थापित करता है चलाते हैं।

समस्या तब होती है जब मैं MyPackage का एक और अद्यतन धक्का देता हूं - अभी भी संस्करण 1.0.0 का। जब मैं इसे क्लाइंट मशीन पर पुनः स्थापित करने का प्रयास करता हूं, तो मुझे पैकेज का पिछला संस्करण मिलता है।

मैं it is the local cache to be blamed पता चला: यदि पैकेज स्थापित किया गया था, यह स्थानीय कैश में हो जाता है और अगली बार एक ही संस्करण के पैकेज स्थापित किया गया है, यह कैश से लिया जाता है। काफी उचित!

लेकिन, दूसरे हाथ पर, वहाँ nuget install आदेश की एक -NoCache विकल्प नहीं है, और मैं इसे स्थानीय कैश की अनदेखी करने की उम्मीद है।

हालांकि, यह सच नहीं है। पहली बार जब मैं इसे -NoCache के साथ चलाता हूं, तो यह कैश अपडेट करता है और वास्तविक नवीनतम संस्करण स्थापित करता है। लेकिन, अगली बार पैकेज अभी भी कैश से लिया गया है, यहां तक ​​कि -NoCache विकल्प के साथ भी।

क्या इसकी उम्मीद है? क्या यह संस्करण बदलने के कारण नहीं है?

शायद ज़रुरत पड़े: सभी NuGet संचालन NuGet.exe साथ और PowerShell सत्र से किया जाता है।

अद्यतन: मैं अजीब व्यवहार का निरीक्षण करता हूं, मैं केवल कैश की समाप्ति द्वारा समझा सकता हूं। जब पैकेज कैश किया जाता है, तो nuget install पर आने वाली सभी कॉलों को पैकेज को कैश, से खींचें जब तक कि कुछ समय पास न हो जाए। मैंने सही अवधि नहीं देखी, लेकिन यह निश्चित रूप से एक घंटे से अधिक है। इस के बाद, nuget install कैश में पैकेज अद्यतन करता है, और स्थिति एक ही ...

+0

हो सकता है कि अगर आप में शामिल -verbosity विस्तृत अतिरिक्त लॉग हमें कुछ संकेत दे सकता है? – allen

+0

यदि मैं कमांड लाइन में '-verbosity विस्तृत' जोड़ता हूं, तो यह अधिक जानकारी आउटपुट नहीं करता है, बस 'सफलतापूर्वक स्थापित' MyPackage.1.0.0 '' क्या आपको पता है ऐसा क्यों है? –

+0

मुझे उम्मीद थी कि लॉग कुछ दिशा दिखाएंगे – allen

उत्तर

10

यान,

हो जाता है मैं MyPackage का एक और अद्यतन धक्का - अभी भी संस्करण 1.0.0 की।

आपको किसी विशेष संस्करण के साथ एक से अधिक पैकेज को धक्का नहीं देना चाहिए: पैकेज अपरिवर्तनीय होना चाहिए। यदि आपने पैकेज में कुछ बदल दिया है, तो बिल्ड नंबर a.b.C बढ़ाएं और पैकेज का एक नया संस्करण दबाएं।

आपके द्वारा अनुभव किया जाने वाला व्यवहार NuGet का एक दुष्प्रभाव है जो किसी दिए गए पैकेज संस्करण को अनिवार्य रूप से अनिश्चित काल तक कैश करने में सक्षम होने की उम्मीद करता है।

+1

आपके उत्तर के लिए धन्यवाद! कारण मैं संस्करण को नहीं बदलता क्योंकि पैकेज अभी भी विकास में है, और दिन में 10-20 बार पुनर्निर्मित किया जाता है। जब मैं शुरुआत में पैकेज को "रिलीज़" करता हूं, तब भी मैं इसे 1.0.0 होना चाहता हूं। इस मामले में आप क्या सुझाव देते हैं? 0.x.x नोटेशन और/या NuGet की प्री-रिलीज सुविधाओं का उपयोग करना? –

+1

हाय यान, आप पैकेज पर बिल्ड नंबर 'डी' बढ़ा सकते हैं: एबीसीडी यह आपको 1.0.0.x बनाए रखने की अनुमति देता है जहां x 73 का निर्माण हो सकता है। प्री-रिलीज एक और विकल्प है, लेकिन अर्थशास्त्र NuGet के साथ अभी भी बहुत अधिक प्रवाह में है, इसलिए आपको NuGet के विभिन्न संस्करणों के बीच अप्रत्याशित परिणाम मिल सकते हैं; मैं इसके बजाय 'डी' बिल्ड नंबर का उपयोग करने की सलाह दूंगा। –

+3

मैं [अर्थात् संस्करण] (http://semver.org) का उपयोग करने की सलाह देता हूं, विशेष रूप से इसके पूर्व-रिलीज नामकरण (उदा। .: 'MyPackage.1.0.0-alpha1440.nupkg' या कुछ)। इसका एक लाभ (उद्योग मानक होने के अलावा) यह है कि पैकेज फ़ीड (जैसे nuget.org) इसे समझते हैं और तदनुसार इसे ध्वजांकित करते हैं। इसे देखें [Antlr उदाहरण] (http://www.nuget.org/packages/Antlr/3.4.1.9004-pre)। –

12

यान,

NuGet संकुल इसे अपने स्थानीय हार्ड ड्राइव पर डाउनलोड करता है संचित करता है। मेरी विंडोज 7 मशीन के लिए कैश सी: \ उपयोगकर्ता \ jmelosegui \ AppData \ Local \ NuGet \ Cache पर स्थित है। तो आप स्थानीय कैश निर्देशिका से भूलना चाहते हैं कि nuget पैकेज को हटा सकते हैं। फिर अगली बार जब आप पैकेज स्थापित करेंगे तो आपको सर्वर से सबसे नवीनतम संस्करण मिल जाएगा।

बीटीडब्लू: मैं @ मैथ्यू-स्केल्टन से सहमत हूं।

आपको किसी विशेष संस्करण के साथ एक से अधिक पैकेज को धक्का नहीं देना चाहिए: पैकेज अपरिवर्तनीय होना चाहिए। यदि आपने पैकेज में कुछ बदल दिया है, तो बिल्ड नंबर a.b.C बढ़ाएं और पैकेज का एक नया संस्करण दबाएं।

मैं अपने परिदृश्य में इस aproach फिट आशा

+2

आपके उत्तर के लिए धन्यवाद! यही वह है जो मैंने अस्थायी रूप से समाप्त कर दिया - NuGet कैश को "गंदे" तरीके से साफ कर रहा था। लेकिन मुझे लगता है कि मुझे पैकेज अपरिवर्तनीयता की अवधारणा की जांच करनी चाहिए ... –