NuGet ऑटो पैकेज रिस्टोर MSBuild के साथ काम नहीं करता है


111

मैं MSBuild 12.0 के साथ packagesलापता ( repositories.configअंदर को छोड़कर ) सामग्री के साथ एक समाधान बनाने की कोशिश कर रहा हूं । मुझे उम्मीद है कि निर्माण से पहले सभी लापता पैकेजों को ऑटो रिस्टोर कर देगा लेकिन ऐसा नहीं है - MsBuild त्रुटियों के टन की रिपोर्ट करता है:

"क्या आप एक निर्देश या विधानसभा संदर्भ का उपयोग कर याद कर रहे हैं?"

NuGet Manager 2.7 है (मैं इसे Visual Studio 2013 में box के बारे में देखता हूँ)। मैंने भी EnableNuGetPackageRestore=trueपैरामीटर पारित करने की कोशिश की - कोई भाग्य नहीं। मैं क्या खो रहा हूँ?


क्या आप Visual Studio के भीतर समाधान का निर्माण कर रहे हैं? पैकेज पुनर्स्थापना अनुभाग में पैकेज प्रबंधक सेटिंग्स में भी सब कुछ है? यदि आप Visual Studio के भीतर निर्माण कर रहे हैं और NuGet 2.7 या इसके बाद के संस्करण का उपयोग कर रहे हैं तो आपको .nuget फ़ोल्डर की आवश्यकता नहीं है।
मैट वार्ड

1
नहीं, मैं कमांड लाइन से नवीनतम MsBuild ( msdn.microsoft.com/en-us/library/hh162058.aspx ) संस्करण का उपयोग कर रहा हूं । VS से 2.8 के भीतर अपडेट किया गया नुगेट - कोई भाग्य नहीं है।
UserControl

3
MSBuild अकेले बहाल नहीं करेगा और वीएस एडिन या तो। आपको पैकेज को पुनर्स्थापित करने में सक्षम करने की आवश्यकता है क्योंकि @Kororaz ने कहा, और फिर सुमेश ने कहा कि .nuget फ़ोल्डर दिखाई देता है और संकुल को पुनर्स्थापित किया जा सकता है। सुनिश्चित करें कि आप स्रोत नियंत्रण के लिए .nuget की जाँच करें।
लेक्स ली

जवाबों:


36

V3.3.0 के रूप में नवीनतम आधिकारिक नुगेट प्रलेखन के साथ अद्यतन

पैकेज पुनर्स्थापना दृष्टिकोण

NuGet पैकेज रिस्टोर का उपयोग करने के लिए तीन दृष्टिकोण प्रदान करता है ।


स्वचालित पैकेज पुनर्स्थापित करेंविजुअल स्टूडियो के भीतर पैकेज रिस्टोर के लिए नूगेट टीम का अनुशंसित दृष्टिकोण है, और इसे नूगेट 2.7 में पेश किया गया था। NuGet 2.7 के साथ शुरू होकर, NuGet Visual Studio एक्सटेंशन Visual Studio की बिल्ड ईवेंट्स में एकीकृत हो जाता है और एक निर्माण शुरू होने पर लापता पैकेजों को पुनर्स्थापित करता है। यह सुविधा डिफ़ॉल्ट रूप से सक्षम है, लेकिन डेवलपर्स चाहें तो बाहर निकाल सकते हैं।


यहां देखिए यह कैसे काम करता है:

  1. प्रोजेक्ट या सॉल्यूशन बिल्ड पर, विजुअल स्टूडियो एक ऐसी घटना को जन्म देता है, जिसके समाधान के भीतर एक बिल्ड शुरू होता है।
  2. NuGet इस घटना पर प्रतिक्रिया देता है और समाधान में शामिल पैकेज.कॉन्फ़िग फ़ाइलों के लिए जाँच करता है।
  3. प्रत्येक संकुल के लिए .config फ़ाइल मिली, इसके संकुल को एन्यूमरेट किया गया है और समाधान के संकुल फ़ोल्डर में मौजूद है।
  4. पैकेज के स्रोतों के आदेश का सम्मान करते हुए, किसी भी लापता पैकेज को उपयोगकर्ता के कॉन्फ़िगर (और सक्षम) पैकेज स्रोतों से डाउनलोड किया जाता है।
  5. जैसे ही पैकेज डाउनलोड किए जाते हैं, वे समाधान के संकुल फ़ोल्डर में अनजिप हो जाते हैं।

यदि आपके पास Nuget 2.7+ स्थापित है; विजुअल स्टूडियो में ऑटोमैटिक पैकेज रिस्टोर को प्रबंधित करना> के लिए एक विधि चुनना महत्वपूर्ण है।

दो तरीके उपलब्ध हैं:

  1. (Nuget 2.7+): विजुअल स्टूडियो -> टूल्स -> पैकेज मैनेजर -> पैकेज मैनेजर सेटिंग्स -> स्वचालित पैकेज पुनर्स्थापना सक्षम करें
  2. (Nuget 2.6 और नीचे) एक समाधान पर राइट क्लिक करें और "इस समाधान के लिए पैकेज पुनर्स्थापना सक्षम करें" पर क्लिक करें।


कमांड लाइन से एक समाधान बनाते समय कमांड-लाइन पैकेज रिस्टोर की आवश्यकता होती है; इसे NuGet के शुरुआती संस्करणों में पेश किया गया था, लेकिन NuGet 2.7 में सुधार किया गया था।

nuget.exe restore contoso.sln

MSBuild- एकीकृत पैकेज पुनर्स्थापना दृष्टिकोण मूल पैकेज पुनर्स्थापना कार्यान्वयन है और यद्यपि यह कई परिदृश्यों में काम करना जारी रखता है, यह अन्य दो दृष्टिकोणों द्वारा संबोधित परिदृश्यों के पूर्ण सेट को कवर नहीं करता है।


63
यह अब नगेट द्वारा अनुशंसित नहीं है। डॉक्स देखें। docs.nuget.org/docs/workflows/…
जॉनसन

@ ओवेन जॉनसन, उस डॉक्टर को दिनांकित नहीं किया गया है जिसे मैं देख सकता हूं और मैं यह नहीं देखता कि यह कैसे कहता है कि यह अब अनुशंसित नहीं है? मैं VS2013 पर हूं और यह बटन ठीक काम करता है। मेरे पास संदर्भित समस्या नहीं थी, "तो, आपने" एनगेट पैकेज पुनर्स्थापना सक्षम करें "पर क्लिक किया और अब आपका सामान नहीं बनता है। इसे ठीक करने के चरण दर्दनाक हैं, लेकिन इस स्क्रिप्ट के साथ कम दर्दनाक हैं।" github.com/owen2/ AutomaticPackageRestoreMigrationScript शायद एक और डॉक्टर है जो इसे आगे बताता है।
ऐनीएजाइल 16

5
स्वत: पैकेज पुनर्स्थापना ms-build एकीकृत पुनर्स्थापना को प्रतिस्थापित करता है। दस्तावेज़ कैसे नवीनीकरण करने के लिए निर्देश हैं। यदि आपको msbuild- एकीकृत विधि के साथ समस्या नहीं है, तो आपको कुछ भी करने की आवश्यकता नहीं है। सरलतम मामलों में, यह काम करता है, लेकिन यदि आपके पास CI सर्वर, साझा परियोजना संदर्भ या कुछ अन्य शर्तें हैं, तो आप कुछ खराब लैंडमाइंस पर कदम रख सकते हैं और गलत संकेत या अन्य मुद्दे हो सकते हैं।
ओवेन जॉन्सन

1
इस उत्तर का उपयोग करना और docs.nuget.org/consume/package-restore/… पर "माइग्रेशन निष्पादित करना" पुराने सामान "निर्देश" करना , मैं सफलता पा रहा था।
ग्रेनडाकोडर

लगता है कि NuGet 4 और .net मानक के साथ चीजें फिर से बदल गई हैं।
ओवेन जॉनसन

239

यदि आप Visual Studio 2017 या बाद में MSBuild 15 या बाद वाले जहाजों का उपयोग कर रहे हैं, और आपकी .csproj फाइलें नए PackageReferenceप्रारूप में हैं , तो सबसे सरल तरीका नए MSBuild Restoreलक्ष्य का उपयोग करना है


किसी ने भी वास्तव में मूल प्रश्न का उत्तर नहीं दिया है, जो है "मैं MSBuild के साथ कमांड-लाइन से निर्माण करते समय ऑटो-रिस्टोर करने के लिए NuGet पैकेज कैसे प्राप्त करूं?" इसका उत्तर है: जब तक आप "एनगेट पैकेज रिस्टोर सक्षम करें" विकल्प का उपयोग नहीं कर रहे हैं (जो अब इस संदर्भ के अनुसार हटा दिया गया है) ), आप नहीं कर सकते (लेकिन नीचे देखें)। यदि आप CI सर्वर पर उदा ऑटोमेटेड बिल्ड करने की कोशिश कर रहे हैं, तो यह बेकार है।

हालांकि वांछित व्यवहार प्राप्त करने के लिए थोड़ा गोल रास्ता है:

  1. Https://dist.nuget.org/win-x86-commandline/latest/nuget.exe से नवीनतम NuGet निष्पादन योग्य डाउनलोड करें और इसे अपने PATH में कहीं रखें। (आप इसे पूर्व-निर्मित कदम के रूप में कर सकते हैं।)
  2. Daud nuget restore जो सभी अनुपलब्ध पैकेजों को स्वतः डाउनलोड करेगा।
  3. भागो msbuildअपने समाधान का निर्माण।

एक तरफ: ऑटो पैकेज रिस्टोर करने के नए और अनुशंसित तरीके में आपके संस्करण नियंत्रण में कम अव्यवस्था शामिल होती है, यह कमांड-लाइन पैकेज को तब तक असंभव बना देता है जब तक कि आप डाउनलोड करने और चलाने के अतिरिक्त घेरा से नहीं कूदते nuget.exe। प्रगति?


समान समाधान के साथ समाप्त हुआ (लेकिन nuget.exe/ ट्रंक / एक्सट को रखा गया)। एक कदम आगे - दो कदम पीछे :(
यूजरकंट्रोल

40
यह एक सही एवेन्यू होना चाहिए, न कि एक चिह्नित।
वोलैंड

यह वास्तव में थोड़ा काउंटर सहज लगता है जब यह नीचे आता है, लेकिन आप वास्तव में कमांड लाइन का उपयोग करके विशिष्ट नगेट पैकेज को वापस जोड़ने के लिए अधिक कार्यशीलता प्राप्त करते हैं। इस समाधान ने मेरे लिए काम किया जबकि ऑटो रिस्टोर फेल हो गया।
TGarrett 14

2
मैं जेनकिंस का उपयोग कर रहा था और ऐसा करना था, यह msbuild को कॉल करने से पहले एक सरल बिल्ड कदम था - विंडोज बैच फ़ाइल बिल्ड स्टेप प्रकार था: और cmd.exe / c "C: \ Program Files \ nuget \ nuget.exe" पुनर्स्थापित करें < RelativePathToSln> .sln - मैंने एसएलएन को एक आदत / प्रक्रिया के रूप में किया है, बस अगर उसे एसएलएन फाइल नहीं मिली।
स्टीव रेडिच- BitShop.com

1
इस दृष्टिकोण ने मेरे लिए काम किया जब जेनकींस बिल्ड पर एक पुनर्स्थापना स्थापित की गई। मेरे लिए एक महत्वपूर्ण कुंजी है कि NuGet.Config था था मेरी .SLN फ़ाइल के रूप में एक ही निर्देशिका में किया जाना है। निर्दिष्ट करने सहित अन्य कॉन्फिग फ़ाइल स्थानों का कोई संयोजन, कमांड लाइन पर -onfigFile काम नहीं करेगा।
ग्वारी डेस

56

Nuget का ऑटोमैटिक पैकेज रिस्टोर विजुअल स्टूडियो (2013 में शुरू) की एक विशेषता है, MSBuild नहीं। आपको दौड़ना पड़ेगाnuget.exe restoreयदि आप कमांड लाइन से संकुल को पुनर्स्थापित करना चाहते हैं तो आपको ।

आप सक्षम नगेट पैकेज पुनर्स्थापना सुविधा का भी उपयोग कर सकते हैं, लेकिन अब इसे नगेट लोगों द्वारा अनुशंसित नहीं किया जाता है क्योंकि यह प्रोजेक्ट फ़ाइलों में गलत परिवर्तन करता है और यदि आप उन परियोजनाओं को किसी अन्य समाधान में बनाते हैं तो समस्याएँ हो सकती हैं।


2
यदि आपका NuGet संस्करण कम से कम 2.7 नहीं है, तो आपको रीस्टोर-कमांड का उपयोग करने से पहले "नगेट अपडेट-सेल्फ" चलाना होगा। मेरा NuGet संस्करण 2.1 था और अद्यतन करने से पहले "पुनर्स्थापना" कमांड को नहीं पहचाना।
टेकनिकाली

2
"यदि आप किसी अन्य समाधान में उन परियोजनाओं का निर्माण करते हैं तो समस्याएँ उत्पन्न होती हैं" मैं अभी तक किसी भी समस्या में नहीं चला हूं और हमारे पास दर्जनों परियोजनाओं के साथ 3 समाधान हैं (प्रत्येक समाधान में कई साझा किए गए हैं)। शायद मैं भाग्यशाली हो गया?
नेल्सन रॉदरमेल

@NelsonRothermel सबसे उल्लेखनीय समस्याग्रस्त स्थिति हो सकती है जो एक विदेशी समाधान के पैकेज फ़ोल्डर में नगेट-डिलीट डीएलएस को संदर्भित करने वाली परियोजनाएं हैं, जो आपके समाधान का निर्माण करते समय उपलब्ध नहीं हो सकती हैं।
ओवेन जॉनसन

2
@OwenJohnson हमारे पास सभी समाधानों के लिए एक सामान्य पैकेज फ़ोल्डर है, इसलिए शायद हम मुद्दों में नहीं चले हैं।
नेल्सन रॉदरमेल

17

मुझे पूरी तस्वीर का पता लगाने में कुछ समय लगा और मैं यहां साझा करना चाहूंगा।

विजुअल स्टूडियो में पैकेज रिस्टोर का उपयोग करने के लिए दो दृष्टिकोण हैं: स्वचालित पैकेज रिस्टोर और एमएसबुइल्ड-इंटीग्रेटेड पैकेज रिस्टोर। 'MSBuild- एकीकृत पैकेज पुनर्स्थापना' पैकेज पुनर्स्थापित करता है जो कुछ परिदृश्यों में समस्याओं का कारण हो सकने वाली निर्माण प्रक्रिया को पूरा करता है। 'ऑटोमैटिक पैकेज रिस्टोर' नूगेट टीम द्वारा अनुशंसित दृष्टिकोण है।

'स्वचालित पैकेज पुनर्स्थापना' कार्य करने के लिए कई चरण हैं:

  1. विजुअल स्टूडियो में, टूल्स -> एक्सटेंशन्स और अपडेट्स, नूगेट को अपग्रेड करें यदि कोई नया संस्करण है (संस्करण 2.7 या बाद में)

  2. यदि आप अपने समाधान के .nuget फ़ोल्डर में TFS का उपयोग करते हैं, तो NuGet.exe और NuGet.targes फ़ाइलों को हटा दें। फिर NuGet.Config को संपादित करें NuGet संकुल में जाँच नहीं करने के लिए:

    <configuration>  
      <solution>  
        <add key="disableSourceControlIntegration" value="true" />  
      </solution>  
    </configuration> 

    यदि आपने पहले टीएफएस के समाधान के पैकेज फ़ोल्डर में चेक किया है, तो फ़ोल्डर को हटा दें और पैकेज फ़ोल्डर के विलोपन को हटा दें।

    यदि आप TFS का उपयोग नहीं करते हैं, तो .nuget फ़ोल्डर को हटा दें।

  3. अपने समाधान में प्रत्येक प्रोजेक्ट फ़ाइल (.csproj या .vbproj) में, उस लाइन को हटा दें जो NuGet.twgets फ़ाइल का संदर्भ देती है। संदर्भ इस तरह दिखता है:

    <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />

    अपने समाधान में प्रत्येक प्रोजेक्ट फ़ाइल में इस लाइन को हटा दें।

  4. दृश्य स्टूडियो मेनू में, या तो के माध्यम से

    उपकरण -> विकल्प -> पैकेज प्रबंधक -> सामान्य या उपकरण -> NuGet पैकेज प्रबंधक -> पैकेज प्रबंधक सेटिंग्स

    कृपया निम्नलिखित दो विकल्पों को सक्षम करें 1) 'NuGet को लापता पैकेज डाउनलोड करने की अनुमति दें' 2) 'Visual Studio के निर्माण के दौरान लापता पैकेजों की स्वचालित रूप से जाँच करें'

  5. निम्न चरणों द्वारा अपने पैकेज को बहाल करने वाले विन्यास का परीक्षण करें

    • अपना समाधान सहेजें और Visual Studio को बंद करें
    • अपने समाधान के पैकेज फ़ोल्डर को हटा दें
    • Visual Studio प्रारंभ करें, अपना समाधान खोलें और उसका पुनर्निर्माण करें।

1
आपका एक कदम <Import Project = "$ (MSBuildToolsPath) \ Microsoft.CSharp.targets" /> को हटाना है। तुम ऐसा क्यों करोगे?
इब्राहिम हाशिमी

3
मुझे लगता है कि आप गलत हैं जो टेम्पलेट में ही है। इसके बिना आपकी सोर्स फाइल्स बिलकुल नहीं बनेंगी।
इब्राहिम हाशिमी

3
मुझे लगता है कि वह Microsoft.CSharp.targets के बजाय nuget.targets का मतलब था।
ओवेन जॉनसन

2
docs.nuget.org/docs/workflows/… <- यहां यिंग जो कहने की कोशिश कर रहा था, उसके आधिकारिक डॉक्स हैं।
ओवेन जॉनसन

1
यिंग सही है ... हर किसी ने नजरअंदाज कर दिया है कि तथ्य यह है कि सतत एकीकरण बनाता है अपने स्वयं के अस्थायी कार्यक्षेत्र बनाने से पहले पूर्व निर्माण घटनाओं, स्रोतों को पाने के लिए, और फिर NuGet संदर्भों पर गला घोंटना। यह TFS बिल्ड ऑटोमेशन के लिए FIX है।
चेजाह्रोर्स्की

5

MSBuild 15 में एक / t: पुनर्स्थापना विकल्प है जो ऐसा करता है। यह विजुअल स्टूडियो 2017 के साथ आता है।

यदि आप इसका उपयोग करना चाहते हैं, तो आपको नए PackageReference का उपयोग करना होगा , जिसका अर्थ है कि packages.configफ़ाइल को इस तरह के तत्वों के साथ प्रतिस्थापित करना (इसे * .csproj में ऐसा करें):

<ItemGroup>
  <!-- ... -->
  <PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0" />
  <!-- ... -->
</ItemGroup>

इस प्रारूप में एक स्वचालित माइग्रेशन है यदि आप 'संदर्भ' पर राइट क्लिक करते हैं (यह नहीं दिखा सकता है कि आपने दृश्य स्टूडियो खोला है, तो 'समाधान के लिए प्रबंधित करें NuGet संकुल' विंडो खोलें और यह दिखाई देना शुरू हो जाएगा)।


आपको यह विचार करना होगा कि msbuild के पुनर्स्थापना विकल्प में नगेट रिस्टोर से सूक्ष्म अंतर हैं - उदाहरण के लिए github.com/NuGet/Home/issues/7651#issuecomment-500842049 देखें ।
Matthieu

4

इयान केम्प का जवाब है (कुछ बिंदु btw है ..), यह बस उसके एक कदम के लिए कुछ मांस जोड़ने के लिए है।

मेरे यहाँ समाप्त होने का कारण यह था कि देव की मशीनें ठीक निर्माण कर रही थीं, लेकिन बिल्ड सर्वर केवल आवश्यक पैकेज (खाली पैकेज फ़ोल्डर) को नीचे नहीं खींच रहा था और इसलिए निर्माण विफल हो रहा था। हालाँकि, बिल्ड सर्वर पर लॉगिंग और मैन्युअल रूप से समाधान का निर्माण, काम किया।

Ians 3 पॉइंट स्टेप्स ( नगेट रिस्टोर को रन करना) के दूसरे को पूरा करने के लिए , आप nuget रिस्टोर कमांड को चलाने के लिए MSBuild टार्गेट को रनिंग कमांड बना सकते हैं, जैसा कि नीचे है (इस मामले में nuget.exe .nuget फोल्डर में है, बजाय। पथ पर), जो तब समाधान के निर्माण से तुरंत पहले टीमसिटी बिल्ड स्टेप (अन्य CI उपलब्ध ...) में चलाया जा सकता है

<Target Name="BeforeBuild">
  <Exec Command="..\.nuget\nuget restore ..\MySolution.sln"/>
</Target>

रिकॉर्ड के लिए मैंने पहले से ही "नगेट इंस्टॉलर" रनर प्रकार की कोशिश की थी, लेकिन यह कदम वेब प्रोजेक्ट्स पर लटका हुआ था (DLL और Windows प्रोजेक्ट्स के लिए काम किया)


1
यदि आप लगातार नए सिरे से कोड (CI) का निर्माण कर रहे हैं, तो यह जाने का रास्ता है।
जहमीम

1
मैं इस दृष्टिकोण को पसंद करता हूं क्योंकि यह गारंटी देता है कि प्रत्येक समाधान / परियोजना उस नगेट के संस्करण पर निर्भर करती है जिसे इसके साथ बनाया गया था। नियत समय में यह महत्वपूर्ण साबित हो सकता है यदि आप पुरानी परियोजनाओं के साथ एक कंपनी में काम करते हैं जो पुराने संस्करणों के उपयोग से बनाई गई थीं। एक देव इस तरह की परियोजनाओं को बनाए रखने के बारे में चिंता किए बिना कह सकता है कि क्या सिस्टम-वाइड nuget.exe चीजों को तोड़ देगा क्योंकि प्रत्येक परियोजना के पास nuget.exe का अपना "स्थानीय स्वाद" है। अंतिम टिप के रूप में यह ध्यान देने योग्य है कि नगेट 3.x + के साथ हम पैकेजों को पुनर्स्थापित कर सकते हैं: nuget.exe संकुल को पुनर्स्थापित करें ।config -PackagesDirectory path \ to \ package
XDS

1
इस दृष्टिकोण के साथ समस्या यह है कि आपको पुनर्स्थापना चरण जोड़ने के लिए किसी भी बाद की परियोजना फ़ाइल को संपादित करने की आवश्यकता होगी। आप TFS2012 में "InvokeProcess" गतिविधि या TFS2013 बिल्ड टेम्पलेट में "NuGetRestore" गतिविधि को बिल्ड सर्वर पर इस चरण को निष्पादित करने के लिए जोड़ सकते हैं। InvokeProcess के लिए, 2012 में "SourcesDirectory" विशेषता में पास करें। TFS 2013 में, बस आवश्यकतानुसार मान भरें। यह कैसे करना है पर बहुत सारे ब्लॉग हैं।
नेविल

3

ध्यान दें कि यदि आप एक बिल्ड सर्वर के रूप में TeamCity का उपयोग कर रहे हैं , तो आपको "NuGet Installer" चरण मिलता है जिसका उपयोग आप बिल्ड चरण से पहले सभी पैकेजों को पुनर्स्थापित करने के लिए कर सकते हैं।


2

एक पैकेज है । प्रोजेक्ट के साथ फाइल। इसमें पैकेज का विवरण होता है।

इसके अलावा एक .nuget फ़ोल्डर है जिसमें NuGet.exe और NuGet.targets शामिल हैं । यदि फ़ाइल में से कोई एक गायब है, तो यह लापता पैकेज को पुनर्स्थापित नहीं करेगा और इसका कारण "क्या आप एक निर्देश या विधानसभा संदर्भ का उपयोग कर गायब हैं?" त्रुटि


2
कोई .nugetफ़ोल्डर नहीं है और कभी नहीं था। packages.configप्रोजेक्ट फ़ोल्डर के भीतर सभी फाइलें जगह में हैं।
UserControl

मुझे लगता है कि NuGet.exe और NuGet.targets ऐप बनाते समय सभी गुम हुए पैकेजों को स्वचालित रूप से पुनर्स्थापित कर देंगे और आपने अपनी NuGet.exe और NuGet.targets फाइलें खो दीं, इसलिए यह त्रुटियों का कारण बनता है
Sumeshk

वैसे भी धन्यवाद-मैं किसी भी मदद की सराहना!
UserControl

.nuget फ़ोल्डर एक विजुअल स्टूडियो जेनरेट किया गया फ़ोल्डर है, जो केवल तब दिखाई देता है जब आप स्वचालित पैकेज रिस्टोर को सक्षम करते हैं। आपके कोड रेपो में nuget.exe होना उपयोगी है, जैसा कि आप इसे अपने बिल्ड में संदर्भित कर सकते हैं, जैसा कि nuget.config है (विशेषकर यदि आपको कई रिपॉजिट से पैकेज प्राप्त करने की आवश्यकता है)।
MytyMyky

2

कभी-कभी ऐसा होता है जब आपके पास उस पैकेज का फ़ोल्डर होता है जिसे आप "पैकेज" फ़ोल्डर (यानी "पैकेज / एंटिटीफ्रेमवर्क.6.0.0 /" ) के अंदर पुनर्स्थापित करने का प्रयास कर रहे हैं, लेकिन "डीएलएल" इसके अंदर नहीं हैं (अधिकांश संस्करण नियंत्रण सिस्टम स्वचालित रूप से ".dll" फ़ाइलों को अनदेखा करता है)। ऐसा इसलिए होता है क्योंकि इससे पहले कि NuGet प्रत्येक पैकेज को पुनर्स्थापित करने का प्रयास करता है यदि फ़ोल्डर पहले से मौजूद हैं, इसलिए यदि यह मौजूद है, तो NuGet मानता है कि "dll" इसके अंदर है। तो अगर यह आपके लिए समस्या है तो बस उस फ़ोल्डर को हटा दें जिसे NuGet इसे सही तरीके से पुनर्स्थापित करेगा।


1
वीएस 2015 और टीएफएस के लिए, यह आपको ठीक कर देगा। समस्या का संदर्भ हल नहीं होगा, और अक्सर मुद्दा यह होता है कि नगेट पैकेज को बहाल नहीं किया जा रहा है क्योंकि पैकेज के लिए फ़ोल्डर पहले से ही संकुल फ़ोल्डर में मौजूद है, लेकिन फिर भी पैकेज को पूरी तरह से ठीक से विस्तारित नहीं किया गया है। (जैसे कि एक lib फ़ोल्डर गुम होना, जिसमें एक .dll होना चाहिए।) पैकेज के भीतर पैकेज के लिए संपूर्ण फ़ोल्डर हटाएं, और फिर समाधान स्तर पर राइट क्लिक करें और संकुल को पुनर्स्थापित करना चुनें।
ग्रेग

1

मैं nuget संकुल को स्क्रिप्टेड नाइटली बिल्ड में शामिल नहीं किया जा रहा था जिसमें devenv.exe का उपयोग करके sln फ़ाइल बनाता है।

मैंने Microsoft से सलाह का पालन ​​किया , और कुंजी कदम NuGet कॉन्फ़िगरेशन को अपडेट कर रहा था %AppData%/NuGetताकि इसमें समाहित हो:

<configuration>
    <packageRestore>
        <add key="automatic" value="True" />
    </packageRestore>
</configuration>

इसलिए मैंने सत्यापित किया कि जब आप विज़ुअल स्टूडियो में सेटिंग्स बदलते हैं (यहाँ अधिकांश उत्तर) .... तो वास्तव में ऊपर जो बदल जाता है। अन्य "कुंजी" है <जोड़ें कुंजी = "सक्षम" मूल्य = "गलत" />।
ग्रैनडाकोडर

0

विजुअल स्टूडियो 2017 में - जब आप आईडीई का उपयोग करते हुए संकलित करते हैं - यह सभी लापता नगेट पैकेज डाउनलोड करेगा और फ़ोल्डर "पैकेज" में बचाएगा।

लेकिन निर्माण मशीन संकलन पर msbuild.exe का उपयोग करके किया गया था। उस स्थिति में, मैंने nuget.exe डाउनलोड किया और पथ में रखा गया।

Msbuild.exe निष्पादित करने से पहले प्रत्येक बिल्ड प्रक्रिया के दौरान। यह निष्पादित करेगा -> nuget.exe NAME_OF_SLN_File को पुनर्स्थापित करें (यदि केवल .SLN फ़ाइल है तो आप उस पैरामीटर को अनदेखा कर सकते हैं)


0

आप भी उपयोग कर सकते हैं

Update-Package -reinstall

Visual Studio में पैकेज प्रबंधन कंसोल पर NuGet संकुल को पुनर्स्थापित करने के लिए।


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