मेरे पास बाहरी और आंतरिक पैकेज स्रोतों के साथ समान स्थिति है जिसमें एक से अधिक समाधान में संदर्भित परियोजनाओं के साथ है। मुझे आज यह हमारे एक कोड बेस के साथ काम कर रहा है और ऐसा लगता है कि यह डेवलपर वर्कस्टेशन और हमारे बिल्ड सर्वर के साथ काम कर रहा है। नीचे की प्रक्रिया में इस परिदृश्य को ध्यान में रखा गया है (हालांकि यह सामान्य संकुल फ़ोल्डर के लिए अनुकूल होना मुश्किल नहीं होना चाहिए जहां)।
- codebase
- प्रोजेक्ट ए
- प्रोजेक्ट बी
- प्रोजेक्ट सी
- समाधान
- समाधान 1
- समाधान २
- समाधान 3
- पैकेज (यह सभी समाधानों द्वारा साझा किया गया आम है)
विजुअल स्टूडियो 2015 अपडेट 3 के साथ NuGet 3.5.0.1484 के रूप में अपडेट किया गया उत्तर
यह प्रक्रिया अब थोड़ी आसान है जब मैंने मूल रूप से इससे निपटा था और सोचा था कि इसे अपडेट करने का समय आ गया है। सामान्य तौर पर, प्रक्रिया कम चरणों के साथ ही होती है। परिणाम एक प्रक्रिया है जो निम्नलिखित को हल करती है या प्रदान करती है:
- स्रोत कोड नियंत्रण में आने वाली सभी चीजों को समाधान में दिखाई और ट्रैक किया जाता है
- विज़ुअल स्टूडियो में पैकेज मैनेजर का उपयोग करके नए पैकेज स्थापित करना या पैकेज अपडेट करना सही रिपॉजिटरी पथ का उपयोग करेगा
- प्रारंभिक कॉन्फ़िगरेशन के बाद, .csproj फ़ाइलों की हैकिंग नहीं
- डेवलपर वर्कस्टेशन का कोई संशोधन (कोड चेक आउट पर तैयार नहीं है)
के बारे में पता करने के लिए कुछ संभावित डाउनसाइड हैं (मुझे अभी तक उनका अनुभव नहीं है, वाईएमएमवी)। देखिये बेनोल कानीचे जवाब और टिप्पणी।
NuGet.Config जोड़ें
आप \ समाधान \ फ़ोल्डर की जड़ में एक NuGet.Config फ़ाइल बनाना चाहते हैं। सुनिश्चित करें कि यह एक UTF-8 एन्कोडेड फ़ाइल है जिसे आप बनाते हैं, यदि आप सुनिश्चित नहीं हैं कि यह कैसे करना है, तो Visual Studio की फ़ाइल-> नई-> फ़ाइल मेनू का उपयोग करें और फिर XML फ़ाइल टेम्पलेट चुनें। निम्नलिखित में NuGet.Config में जोड़ें:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<config>
<add key="repositoryPath" value="$\..\Packages" />
</config>
</configuration>
रिपॉजिटरीपाथ सेटिंग के लिए, आप $ टोकन का उपयोग करके एक पूर्ण पथ या रिश्तेदार पथ (अनुशंसित) निर्दिष्ट कर सकते हैं। $ टोकन उस जगह पर आधारित है जहां NuGet.Config स्थित है ($ टोकन वास्तव में NuGet.Config के स्थान के नीचे एक स्तर के सापेक्ष है)। इसलिए, अगर मेरे पास \ Solutions \ NuGet.Config है और मुझे \ Solutions \ Package चाहिए, तो मुझे मूल्य के रूप में $ \ .. \ पैकेज निर्दिष्ट करने की आवश्यकता होगी।
इसके बाद, आप एक समाधान फ़ोल्डर जोड़ना चाहेंगे जिसका नाम "नुगेट" जैसा कुछ हो। आपके समाधान पर राइट-क्लिक करें, Add-> नया समाधान फ़ोल्डर)। सॉल्यूशन फोल्डर वर्चुअल फोल्डर हैं जो केवल विजुअल स्टूडियो सॉल्यूशन में मौजूद हैं और ड्राइव पर एक वास्तविक फोल्डर नहीं बनाएंगे (और आप फाइलों को कहीं से भी रेफर कर सकते हैं)। अपने "NuGet" समाधान फ़ोल्डर पर राइट-क्लिक करें और फिर जोड़ें-> मौजूदा आइटम और \ Solutions \ NuGet.Colfig का चयन करें।
हम ऐसा कर रहे हैं इसका कारण यह है कि यह समाधान में दिखाई दे रहा है और यह सुनिश्चित करने में मदद करनी चाहिए कि यह आपके स्रोत कोड नियंत्रण के लिए ठीक से प्रतिबद्ध है। आप अपने साझाकरण परियोजनाओं में भाग लेने वाले अपने कोडबेस में प्रत्येक समाधान के लिए यह कदम उठाना चाह सकते हैं।
किसी भी .sln फ़ाइलों के ऊपर \ समाधान \ में NuGet.Config फ़ाइल रखकर, हम इस तथ्य का लाभ उठा रहे हैं कि NuGet "वर्तमान कार्यशील निर्देशिका" से फ़ोल्डर संरचना को ऊपर की ओर नेविगेट करेगा ताकि उपयोग करने के लिए NuBet.Config फ़ाइल की तलाश हो। "करंट वर्किंग डायरेक्टरी" का अर्थ है यहाँ पर कुछ अलग चीज़ें हैं, एक है NuGet.exe का निष्पादन पथ और दूसरा है .sln फ़ाइल का स्थान।
अपने पैकेज फ़ोल्डर पर स्विच करना
सबसे पहले, मैं आपको अपने प्रत्येक समाधान फ़ोल्डर के माध्यम से जाने की सलाह देता हूं और मौजूद किसी भी \ पैकेज \ फ़ोल्डर को हटा देता हूं (आपको पहले विजुअल स्टूडियो को बंद करने की आवश्यकता होगी)। इससे यह देखना आसान हो जाता है कि नुगेट आपके नए कॉन्फ़िगर किए गए \ पैकेज \ फ़ोल्डर को कहां रख रहा है और यह सुनिश्चित करता है कि गलत \ संकुल \ फ़ोल्डर के किसी भी लिंक विफल हो जाएंगे और फिर तय किए जा सकते हैं।
Visual Studio में अपना समाधान खोलें और सभी को फिर से बनाएँ। आपके द्वारा प्राप्त की गई सभी त्रुटियों को अनदेखा करें, यह इस बिंदु पर अपेक्षित है। यह हालांकि निर्माण प्रक्रिया की शुरुआत में NuGet पैकेज पुनर्स्थापना सुविधा को बंद कर देना चाहिए। सत्यापित करें कि आपका \ समाधान \ संकुल \ फ़ोल्डर उस स्थान पर बनाया गया है जिसे आप चाहते हैं। यदि यह नहीं है, तो अपने कॉन्फ़िगरेशन की समीक्षा करें।
अब, अपने समाधान में प्रत्येक परियोजना के लिए आप निम्न करना चाहेंगे:
- प्रोजेक्ट पर राइट-क्लिक करें और अनलोड प्रोजेक्ट चुनें
- प्रोजेक्ट पर राइट-क्लिक करें और Edit your-xxx.csproj चुनें
- किसी भी संदर्भ को '' संकुल '' खोजें और उन्हें नए स्थान पर अद्यतन करें।
- इनमें से अधिकांश <HintPath> संदर्भ होंगे, लेकिन उनमें से सभी नहीं। उदाहरण के लिए, WebGrease और Microsoft.Bcl.Bild में अलग-अलग पथ सेटिंग्स होंगी जिन्हें अपडेट करना होगा।
- .Csproj को सहेजें और फिर प्रोजेक्ट पर राइट-क्लिक करें और रीलोड प्रोजेक्ट चुनें
एक बार आपकी सभी .csproj फाइलें अपडेट हो जाने के बाद, दूसरे को फिर से बनाएं और सभी को मिसिंग रेफरेंस के बारे में और अधिक गलतियां नहीं करनी चाहिए। इस बिंदु पर आप कर रहे हैं, और अब एक साझा संकुल फ़ोल्डर का उपयोग करने के लिए NuGet कॉन्फ़िगर किया गया है।
2012 के VStudio के साथ NuGet 2.7.1 (2.7.40906.75) के रूप में
सबसे पहले ध्यान रखने वाली बात यह है कि nuget.config नगेट पैकेज सिस्टम में सभी पथ सेटिंग्स को नियंत्रित नहीं करता है। यह विशेष रूप से यह पता लगाने के लिए भ्रामक था। विशेष रूप से, समस्या यह है कि msbuild और Visual Studio (msbuild को कॉल करते हुए) nuget.config में पथ का उपयोग नहीं करते हैं, बल्कि इसे nuget.targets फ़ाइल में ओवरराइड कर रहे हैं।
पर्यावरण की तैयारी
सबसे पहले, मैं आपके समाधान के फ़ोल्डर के माध्यम से जाऊँगा और मौजूद सभी \ संकुल \ फ़ोल्डरों को निकालूँगा। यह सुनिश्चित करने में मदद करेगा कि सभी पैकेज दृष्टिगत रूप से सही फ़ोल्डर में स्थापित हो रहे हैं और आपके पूरे समाधान में किसी भी खराब पथ संदर्भ को खोजने में मदद करते हैं। इसके बाद, मैं सुनिश्चित करूंगा कि आपके पास नवीनतम नगेट विजुअल स्टूडियो एक्सटेंशन स्थापित हो। मैं यह भी सुनिश्चित करूंगा कि आपके पास प्रत्येक समाधान में नवीनतम nuget.exe स्थापित है। एक कमांड प्रॉम्प्ट खोलें और प्रत्येक $ (SolutionDir) \ .nuget \ फ़ोल्डर में जाएं और निम्नलिखित कमांड निष्पादित करें:
nuget update -self
NuGet के लिए सामान्य पैकेज फ़ोल्डर पथ सेट करना
प्रत्येक $ (SolutionDir) \ .nuget \ NuGet.Config को खोलें और <b> के अंदर निम्नलिखित जोड़ें:
<config>
<add key="repositorypath" value="$\..\..\..\Packages" />
</config>
नोट: आप एक निरपेक्ष पथ या एक सापेक्ष पथ का उपयोग कर सकते हैं। ध्यान रखें, यदि आप $ के साथ एक सापेक्ष पथ का उपयोग कर रहे हैं कि यहNuGet.Config के स्थान के नीचे एक स्तर के सापेक्ष है (विश्वास करें कि यह एक बग है)।
MSBuild और Visual Studio के लिए सामान्य पैकेज फ़ोल्डर पथ सेट करना
प्रत्येक $ (SolutionDir) \ .nuget \ NuGet.targets खोलें और निम्न अनुभाग को संशोधित करें (ध्यान दें कि गैर-विंडोज के लिए इसके नीचे एक और खंड है):
<PropertyGroup Condition=" '$(OS)' == 'Windows_NT'">
<!-- Windows specific commands -->
<NuGetToolsPath>$([System.IO.Path]::Combine($(SolutionDir), ".nuget"))</NuGetToolsPath>
<PackagesConfig>$([System.IO.Path]::Combine($(ProjectDir), "packages.config"))</PackagesConfig>
<PackagesDir>$([System.IO.Path]::Combine($(SolutionDir), "packages"))</PackagesDir>
</PropertyGroup>
PackageDir को अद्यतन करें
<PackagesDir>$([System.IO.Path]::GetFullPath("$(SolutionDir)\..\Packages"))</PackagesDir>
नोट: GetFullPath हमारे सापेक्ष पथ को एक पूर्ण पथ में हल करेगा।
सामान्य फ़ोल्डर में सभी नगेट संकुल को पुनर्स्थापित करना
एक कमांड प्रॉम्प्ट खोलें और प्रत्येक $ गोटो (सॉल्यूडिर) \ .नेट करें और निम्नलिखित कमांड निष्पादित करें:
nuget restore ..\YourSolution.sln
इस बिंदु पर, आपके पास अपने सामान्य स्थान पर एक एकल \ संकुल \ फ़ोल्डर होना चाहिए और आपके किसी भी समाधान फ़ोल्डर के भीतर नहीं होना चाहिए। यदि नहीं, तो अपने रास्तों का सत्यापन करें।
परियोजना संदर्भों को ठीक करना
टेक्स्ट एडिटर में प्रत्येक .csproj फ़ाइल खोलें और किसी भी संदर्भ को \ पैकेज में खोजें और उन्हें सही पथ पर अपडेट करें। इनमें से अधिकांश <HintPath> संदर्भ होंगे, लेकिन उनमें से सभी नहीं। उदाहरण के लिए, WebGrease और Microsoft.Bcl.Build में अलग-अलग पथ सेटिंग होंगी जिन्हें अपडेट करने की आवश्यकता होगी।
अपना समाधान बनाएँ
विजुअल स्टूडियो में अपना समाधान खोलें और एक बिल्ड को किक करें। यदि यह लापता पैकेजों के बारे में शिकायत करता है, जिन्हें बहाल करने की आवश्यकता है, तो यह न मानें कि पैकेज गायब है और इसे पुनर्स्थापित करने की आवश्यकता है (त्रुटि भ्रामक हो सकती है)। यह आपकी .csproj फ़ाइलों में से एक खराब पथ हो सकता है। पैकेज को पुनर्स्थापित करने से पहले पहले जांचें।
लापता पैकेज के बारे में एक बिल्ड त्रुटि है?
यदि आपने पहले ही सत्यापित कर लिया है कि आपकी .csproj फ़ाइलों में पथ सही हैं, तो आपके पास प्रयास करने के लिए दो विकल्प हैं। यदि यह स्रोत कोड नियंत्रण से अपने कोड को अपडेट करने का परिणाम है तो आप एक स्वच्छ कॉपी की जाँच करने और फिर उस निर्माण का प्रयास कर सकते हैं। यह हमारे डेवलपर्स में से एक के लिए काम करता है और मुझे लगता है कि .suo फ़ाइल या कुछ इसी तरह की एक कलाकृति थी। अन्य विकल्प मैन्युअल रूप से प्रश्न में समाधान के .nuget फ़ोल्डर में कमांड लाइन का उपयोग करके एक पैकेज को पुनर्स्थापित करने के लिए है:
nuget restore ..\YourSolution.sln
$
रिश्तेदार पथ के सामने से गायब थे । इसके अलावा, NuGet.Config फ़ाइलों के बारे में आपके प्रश्न का उत्तर यहाँ है । यह .nuget में पहली दिखता है, तो सभी माता पिता निर्देशिका में है, तो अपने AppData में 'वैश्विक' फ़ाइल पर: फिर उन्हें उलटे क्रम में लागू होता है (जो कुछ भी है कि इसका मतलब है)।