NuGet पैकेज पुनर्स्थापना कार्य नहीं कर रहा है


165

मैंने एक कंप्यूटर पर एक प्रोजेक्ट में जाँच की, दूसरे पर जाँच की, और पाया कि NuGet द्वारा स्थापित बायनेरिज़ गायब हैं। मैं उन्हें स्रोत नियंत्रण में भी देख सकता था, लेकिन ऐसा लगता है कि एक बेहतर समाधान है:

http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

मैंने उन निर्देशों का पालन किया, अब एक .nugetफ़ोल्डर है जहाँ एक होना चाहिए, मेरी .csproj फ़ाइल में निम्नलिखित प्रविष्टियाँ हैं:

<RestorePackages>true</RestorePackages>
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />

और फिर भी जब मैं अपने समाधान का पुनर्निर्माण करता हूं, तो लापता पैकेजों को बहाल नहीं किया जाता है।

मैं क्या खो रहा हूँ? मैं इस समस्या का निदान कैसे कर सकता हूं?


क्या आपको आउटपुट लॉग में nuget.exe चालू हो रहा है?
प्रणव

और महत्वपूर्ण बात: क्या आप आउटपुट लॉग में कोई त्रुटि देख रहे हैं?
13:17 पर मार्टेनबरा

जवाबों:


272

ध्यान दें कि आप पैकेज कमांड मैनेजर कंसोल में निम्नलिखित कमांड चलाकर पैकेज रीस्टोर को निष्पादित करने के लिए बाध्य कर सकते हैं

अद्यतन-पैकेज-स्थापना रद्द करें

समाधान में सब कुछ फिर से स्थापित करने के लिए मजबूर करता है।


अद्यतन-पैकेज-स्थापना रद्द करें -ProjectName myProj

बलों को myProj परियोजना में सब कुछ की फिर से स्थापना।

नोट : यह परमाणु विकल्प है। इस आदेश का उपयोग करते समय आपको आपके द्वारा स्थापित पैकेजों के समान संस्करण नहीं मिल सकते हैं और इससे समस्याएँ हो सकती हैं। समाधान स्तर के विपरीत परियोजना स्तर पर ऐसा होने की संभावना कम होती है।

आप -safeसमान मेजर और माइनर संस्करण घटक के साथ नए संस्करणों में अपग्रेड करने के लिए कमांडलाइन पैरामीटर विकल्प का उपयोग कर सकते हैं । इस विकल्प को बाद में जोड़ा गया था और टिप्पणियों में उल्लिखित कुछ मुद्दों को हल करता है।

अद्यतन-पैकेज-स्थापना रद्द करें-सुरक्षित करें


7
@ NightOwl888 कुछ ऐसा लगता है, जिसकी जरूरत है कि नगेट की सूचना दी जाए क्योंकि ऐसा कोई तरीका नहीं होना चाहिए, जब तक कि आपके पास वास्तव में हमेशा DLL नरक बाध्यकारी मुद्दे नहीं थे और भाग्य से यह काम कर रहा था, लेकिन इसे फिर से स्थापित करने से आपका काम खत्म हो गया।
क्रिस मैरिसिक

4
यदि आप स्रोत नियंत्रण का उपयोग कर रहे हैं तो @ nightowl यह नहीं होना चाहिए कि परिवर्तनों को वापस करना कठिन है।
एरिक

4
यहां मुख्य ड्रा बैक पैकेज संस्करणों को बनाए नहीं रखा गया है, इसलिए नवीनतम पैकेज संस्करण स्थापित किया जाएगा। यह एक समस्या हो सकती है यदि आपकी परियोजना एक नए संस्करण के साथ संगत नहीं है ..
JDandChips

4
हाँ, अद्यतन-पैकेज-स्थापना रद्द मेरे लिए काम किया। मुझे नहीं पता कि आईडीई सिर्फ ऐसा क्यों नहीं करता है। सब कुछ सही तरीके से सेट है। उगघ, मैं कसम खाता हूं, नुगेट अच्छा और परेशान करने वाला दोनों है।
जेरेमी रे ब्राउन

2
आपको "महत्वपूर्ण जोड़ने के लिए अच्छा है! यह आपके प्रोजेक्ट को नष्ट कर सकता है" आपके उत्तर के बॉटम पर!
भक्त

25

इस पोस्ट पर ठोकर खाने वाले अन्य लोगों के लिए, इसे पढ़ें।

NuGet 2.7+ ने हमें ऑटोमैटिक पैकेज रिस्टोर में पेश किया । यह अधिकांश अनुप्रयोगों के लिए एक बेहतर दृष्टिकोण माना जाता है क्योंकि यह MSBuild प्रक्रिया के साथ छेड़छाड़ नहीं करता है। कम सिरदर्द।

आरंभ करने के लिए कुछ लिंक:


2
NuGet के वर्तमान संस्करण के लिए उपयुक्त उत्तर के लिए धन्यवाद।
एरिक जे।

20

आपको निम्नलिखित में से एक तरीका चुनना होगा:

सभी समाधान की परियोजनाओं में नाम से एक पैकेज को फिर से स्थापित करना:

Update-Package –reinstall <packageName>

इसके नाम से एक पैकेज को फिर से स्थापित करना और सभी समाधानों की परियोजनाओं में निर्भरता को अनदेखा करना:

Update-Package –reinstall <packageName> -ignoreDependencies

किसी प्रोजेक्ट में नाम से एक पैकेज को फिर से स्थापित करना:

Update-Package –reinstall <packageName> <projectName>

किसी विशिष्ट प्रोजेक्ट में सभी पैकेजों को फिर से स्थापित करना:

Update-Package -reinstall -ProjectName <projectName>

किसी समाधान में सभी पैकेजों को फिर से स्थापित करना:

Update-Package -reinstall 

मेरी समस्या को त्वरित और गंदे तरीके से हल किया।
ब्लैकऑर्किड

20

क्या आपने उस प्रोजेक्ट में पैकेज रिस्टोर मोड को सक्षम किया है जिसमें गुम पैकेज / बायनेरिज़ हैं? पुनर्स्थापना मोड को सक्षम करते समय पैकेज को सही तरीके से स्थापित करने के लिए एक ज्ञात समस्या है:

http://nuget.codeplex.com/workitem/1879


मूल लिंक मर चुका है; यह एक प्रतिस्थापन हो सकता है: https://github.com/NuGet/Home/issues/1968


3
लिंक के लिए धन्यवाद। एक पैकेज में पैकेज रिस्टोर मोड को सक्षम करें जिसमें लापता पैकेज / बायनेरिज़ एक सामान्य मामला होगा। यदि आपके पास पैकेज नहीं हैं, तो जब आप उन्हें प्राप्त करना चाहते हैं। उपयोग-मामला विफल।
एंथनी

2
जब आप कहते हैं, "उस पैकेज में प्रोजेक्ट रिस्टोर मोड को सक्षम करें जिसमें गुम पैकेज हैं", तो आपका क्या मतलब है? क्या कोई कंसोल कमांड है जिसे करने के लिए मुझे दौड़ने की आवश्यकता है?
कोडविअर 16

90
NuGet मुझे दैनिक आधार पर विफल करता है, मैं इसे पूरी तरह से घृणा करता हूं।
जैमर

14

वीएस 2017

उपकरण> NuGet पैकेज प्रबंधक> पैकेज प्रबंधक सेटिंग्स> सामान्य "सभी NuGet कैश साफ़ करें" पर क्लिक करें


स्रोत नियंत्रण से बाहर एक समाधान की जाँच करते समय (संदर्भ में Visual Studio टीम एक्सप्लोरर का उपयोग करके DevOps / Git के साथ बनाया गया) गायब संदर्भों के कारण संभव नहीं थे और पुनर्स्थापना संकुल ने कुछ भी नहीं किया। यह समाधान इस परिस्थिति के लिए सही था।
PJRobot

12

मैं दो परिदृश्यों में इस समस्या में चला गया हूं।

सबसे पहले, जब मैं msbuild.exe का उपयोग करके कमांड लाइन से अपना समाधान बनाने का प्रयास करता हूं। दूसरे, जब मैं टीएफएस और सीआई का उपयोग करके अपने बिल्ड सर्वर पर एसएलएन और युक्त परियोजनाओं का निर्माण करने का प्रयास करता हूं।

मुझे यह दावा करने में त्रुटियां मिलीं कि संदर्भ गायब हैं। जब मेरे स्थानीय बिल्ड निर्देशिका और TFS सर्वर दोनों का निरीक्षण करते हैं तो मैं देखता हूं कि / संकुल फ़ोल्डर नहीं बनाया गया है, और नगेट संकुल को कॉपी नहीं किया गया है। एलेक्जेंडर के जवाब में सूचीबद्ध निर्देशों के बाद http://nuget.codeplex.com/workitem/1879 ने भी मेरे लिए काम नहीं किया।

मैंने VS2010 के माध्यम से पुनर्स्थापना संकुल को सक्षम किया है और मैंने VS2010 के भीतर से केवल काम का निर्माण देखा है। फिर से, msbuild का उपयोग करना विफल रहता है। मेरा वर्कअराउंड शायद पूरी तरह से अमान्य है, लेकिन मेरे पर्यावरण के लिए यह सब कुछ स्थानीय रूप से एक कमांड लाइन बिल्ड से काम कर रहा है, साथ ही साथ टीएफएस में एक सीआई बिल्ड से।

मैं। \ Nuget में गया और इस लाइन को .nuget \ NuGet.targets फ़ाइल में बदल दिया।

से:

<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" -o "$(PackagesDir)"</RestoreCommand>

को: (नोटिस, चर के आसपास उद्धरण के बिना)

<RestoreCommand>$(NuGetCommand) install $(PackagesConfig) -source $(PackageSources) -o $(PackagesDir)</RestoreCommand>

मैं समझता हूं कि अगर मेरी निर्देशिकाओं में उनके स्थान हैं, तो यह विफल हो जाएगा, लेकिन मेरे पास मेरी निर्देशिकाओं में स्थान नहीं हैं और इसलिए इस वर्कअराउंड को सफलतापूर्वक पूरा करने के लिए मेरा निर्माण हुआ ... फिलहाल।

मैं कहूंगा कि आपके बिल्ड में डायग्नोस्टिक लेवल लॉगिंग चालू करने से पता चलता है कि msbuild द्वारा क्या कमांड निष्पादित किए जा रहे हैं। यह वही है जो मुझे अस्थायी रूप से लक्ष्य फ़ाइल को हैक करने के लिए प्रेरित करता है।


मेरे पास दोहरे उद्धरण चिह्नों के साथ मुद्दा था और आपको वही संपादन करना था जो आपने किया था। अधिक निराश!
ग्रेग

5

अगर कुछ और काम नहीं किया, तो कोशिश करें:

  1. प्रोजेक्ट बंद करें।
  2. अपने समाधान फ़ोल्डर में संकुल फ़ोल्डर हटाएं।
  3. प्रोजेक्ट को फिर से खोलें और फिर से नगेट पैकेज को पुनर्स्थापित करें।

मेरे लिए काम किया और कोशिश करना आसान है।


2
इसने मेरे लिए काम किया। चरण 3 में, मुझे पैकेज को मैन्युअल रूप से पुनर्स्थापित करने की आवश्यकता नहीं थी - जब मैंने परियोजना खोली तो वे स्वचालित रूप से बहाल हो गए।
तवाब वाकिल

5

यदि कोई अन्य उत्तर आपके लिए काम नहीं करता है, तो निम्नलिखित प्रयास करें जो केवल एक चीज थी जो मेरे लिए काम करती थी:

अपना ढूँढो .csproj फ़ाइल और उसे पाठ संपादक में संपादित करें।

<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">अपने में टैग खोजें.csproj फ़ाइल और पूरे ब्लॉक को हटा दें।

समाधान में सभी संकुल पुनः स्थापित करें:

Update-Package -reinstall

इसके बाद आपके नगेट पैकेज को बहाल किया जाना चाहिए, मुझे लगता है कि यह एक फ्रिंज केस हो सकता है जो केवल तब होता है जब आप अपनी परियोजना को किसी अन्य स्थान पर स्थानांतरित करते हैं।


इसने मुझे पूरी तरह से पागल होने से बचा लिया। धन्यवाद!
जेफ हाय

4

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


4

मेरे लिए मेरे पास एक खाली टैग NuGetPackageImportStamp इन .csproj था

<NuGetPackageImportStamp>
    </NuGetPackageImportStamp>

इसमें आदर्श रूप से कुछ मान्य GUID होने चाहिए।

ऊपर दिए गए टैग को हटाकर फिर "रिस्टोर नगेट्स" ने मेरे लिए काम किया।


1

कभी-कभी कुछ अजीब होता है और स्वचालित रूप से पुनर्स्थापित करने के लिए विजुअल स्टूडियो का उपयोग करना काम नहीं करता है। उस स्थिति में आप NuGet Package Manager कंसोल का उपयोग कर सकते हैं। यह उपकरण -> NuGet पैकेज मैनेजर -> पैकेज मैनेजर कंसोल से विजुअल स्टूडियो के भीतर खोला जाता है । कंसोल के भीतर कमांड सरल हैं। और कमांड टाइप करते समय संदर्भ सहायता प्राप्त करने के लिए बस बटन दबाएं और यह आपको सभी विकल्प देगा जो आपके द्वारा लिखे गए अक्षरों से शुरू होते हैं। इसलिए यदि कोई पैकेज स्थापित नहीं है, उदाहरण के लिए log4net, तो निम्न कमांड टाइप करें:

स्थापित-पैकेज log4net

आप एक पूरी बहुत कुछ कर सकते हैं, जैसे कि संस्करण को स्थापित करने के लिए निर्दिष्ट करें, पैकेज अपडेट करें, पैकेज की स्थापना रद्द करें, आदि।

जब विजुअल स्टूडियो एक अजीबोगरीब की तरह काम कर रहा था, तो मुझे मेरी मदद करने के लिए कंसोल का उपयोग करना पड़ा।


1

स्वचालित पैकेज पुनर्स्थापना निम्नलिखित कारणों में से किसी एक के लिए विफल रहेगा:

  1. आपने समाधान के .nuget फ़ोल्डर (जो आपके समाधान रूट फ़ोल्डर में पाया जा सकता है) से NuGet.exe और NuGet.targets फ़ाइलें नहीं निकालीं।
  2. आपने उपकरण >> विकल्प >> नौगट पैकेज प्रबंधक >> सामान्य सेटिंग्स से स्वचालित पैकेज को पुनर्स्थापित करने में सक्षम नहीं किया।
  3. आप Nuget.targets फ़ाइल के लिए अपनी सभी परियोजनाओं में मैन्युअल रूप से संदर्भ निकालना भूल गए
  4. आपको विज़ुअल स्टूडियो को पुनरारंभ करने की आवश्यकता है (सुनिश्चित करें कि प्रक्रिया फिर से शुरू होने से पहले आपके कार्य प्रबंधक से मार दी गई है)।

निम्नलिखित लेख अधिक विस्तार से बताता है कि अंक 1-3 के बारे में कैसे जाना है: https://docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore


1
आपके # 1 बिंदु के बारे में, आप जिस लिंक को अपनी सलाह प्रदान करते हैं, वह है: "यदि आप TFS 1 का उपयोग कर रहे हैं। समाधान के .nuget फ़ोल्डर से NuGet.exe और NuGet.targets फ़ाइलों को निकालें। बाईपास को जारी रखने के लिए NuGet .Config फ़ाइल को पुनःप्राप्त करें। स्रोत नियंत्रण में पैकेज जोड़ना। "
एंड्रयू डेनिसन

1

मेरे पास अपने सिस्टम पर एक सिस्टम रिस्टोर करने के बाद NuGet पैकेज था, इसे लगभग दो दिन का बैकअप दिया। (इस बीच NuGet संकुल स्थापित किया गया था।) इसे ठीक करने के लिए, मुझे अपने उपयोगकर्ता प्रोफ़ाइल में .nuget \ package फ़ोल्डर में जाना था, संकुल ढूंढना था, और उन्हें हटाना था। इसके बाद ही विजुअल स्टूडियो पैकेजों को नए सिरे से खींचेगा और उन्हें संदर्भ के रूप में ठीक से जोड़ देगा।


1

सबसे अच्छा वर्कअराउंड जो मुझे स्क्रैच से एक नया प्रोजेक्ट बनाने में मिला था, फिर कोड के साथ सभी स्रोत फ़ाइलों को आयात करें। मेरा प्रोजेक्ट इतना जटिल नहीं था इसलिए मुझे वहां से कोई समस्या नहीं थी।


1

मेरी स्थिति में किसी अन्य समाधान ने काम नहीं किया:

AspNetCore निर्भरताएं स्थापित / अनइंस्टॉल की गईं और उन्हें कैश किया जा रहा था। 'AspNetCore.All' ठीक से अपडेट / रीइंस्टॉल / हटाने से इंकार करेगा। और मैंने जो भी किया, उसकी परवाह किए बिना, यह कैश्ड निर्भरता का उपयोग करेगा (क्योंकि यह संगत नहीं था), क्योंकि वे उच्च संस्करण थे।

  1. बैकअप सब कुछ। निर्भरता की सूची पर ध्यान दें, आपको VisualStudio को फिर से स्थापित करना होगा
  2. एक पाठ संपादक में सभी .proj फाइलें खोलें और सभी को हटा दें PackageReference
  3. प्रत्येक प्रोजेक्ट में bin, objफ़ोल्डर , फ़ोल्डर हटाएं
  4. समाधान में पाए जाने वाले किसी भी "पैकेज" फ़ोल्डर को हटा दें।
  5. खुला समाधान, में जाओ Tools > Nuget Package Manager > Package Manager Settingsऔर Clear all Nuget caches। कंसोल की जाँच करें क्योंकि यह कुछ आइटम को निकालने में विफल हो सकता है - फ़ोल्डर पथ की प्रतिलिपि बनाएँ और दृश्य स्टूडियो से बाहर निकलें।
  6. उस फ़ोल्डर से कुछ भी हटाएं फिर से खोलें समाधान और खरोंच से फिर से नगेट पैकेज स्थापित करना शुरू करें।

यदि वह अभी भी काम नहीं करता है, तो दोहराएं nugetऔर कुछ भी देखने में कैशी दिखने के लिए विंडोज़ एक्सप्लोरर में अपनी ड्राइव खोजें।


0

vs2015 नगेट पुनर्स्थापना समस्या को सक्षम नहीं करता है। मेरा समाधान:

  1. फ़ोल्डर जोड़ें .nuget, निर्देशिका .nug में NuGet.Config और NuGet.targets फ़ाइल जोड़ें।

  2. प्रत्येक प्रोजेक्ट फ़ाइल ऐड: बिल्ड

  <RestorePackages>true</RestorePackages>

  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
  </Target>

यह करने का पुराना तरीका है। @Davenewza उत्तर देखें, और उसके लिंक blog.davidebbo.com/2014/01/…
timB33

0

यदि आप जो त्रुटि का सामना कर रहे हैं, वह "रिमोट सर्वर से कनेक्ट करने में असमर्थ" था जैसा कि मेरा था, तो यह आपको इस चेक के साथ-साथ उपरोक्त टिप्पणियों में प्रदान किए गए चेक के साथ लाभान्वित करेगा।

मैंने देखा कि 2 NUGET पैकेज स्रोत थे, जिनसे पैकेज डाउनलोड किए जा सकते थे (टूल-> Nuget पैकेज मैनेजर-> Packager प्रबंधक सेटिंग्स)। पैकेज स्रोत में से एक कार्य नहीं कर रहा था और नुगेट केवल उस स्रोत से डाउनलोड करने का प्रयास कर रहा था।

मेरे द्वारा डाउनलोड करने के लिए पैकेज स्रोत बदलने के बाद चीजें ठीक हो गईं: https://www.nuget.org/api/v2/ सेटिंग में केवल


0

मेरे मामले में, एक निरस्त Nuget पुनर्स्थापना-प्रयास ने packages.configसमाधान में मौजूद फ़ाइलों में से एक को दूषित कर दिया था । मुझे अपने काम करने वाले पेड़ की जाँच करने से पहले इसकी खोज नहीं हुई फ़ाइल में परिवर्तनों को वापस करने के बाद, Nuget पुनर्स्थापना फिर से काम कर रही थी।


0

Nuget पुनर्स्थापना कार्य करने के लिए एक शॉर्टकट है, 1. सुनिश्चित करें कि इंटरनेट कनेक्शन या Nuget urls VS टूल्स विकल्प मेनू में उचित हैं। समाधान में .nuget या nuget फ़ोल्डर को देखें, और - nuget.exe प्राप्त करने के लिए किसी से भी कॉपी करें।

  1. DELETE संकुल फ़ोल्डर, यदि मौजूद है

  2. पैकेज प्रबंधक कंसोल खोलें इस कमांड को निष्पादित करें

    • nuget.exe का पूर्ण पथ पेस्ट करें .sln फ़ाइल का पूर्ण पथ!
  3. यदि किसी भी गुम सन्दर्भ के लिए निर्माण नहीं हुआ, तो इंस्टाल-पचैक कमांड का उपयोग करें। आशा है कि यह मदद करता है (HIH)

0

VS2017 में, समाधान => कमांडलाइन खोलें => डेवलपर कमांड लाइन पर राइट-क्लिक करें।

एक बार खुलने के बाद, टाइप करें (और एंटर दबाएं)

dotnet restore

यह किसी भी / सभी पैकेजों को बहाल करेगा, और आपको व्हाट्सएप का एक अच्छा कंसोल आउटपुट मिलेगा ...

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