Nuget संदर्भ बहाल करना?


182

मेरे पास विज़ुअल स्टूडियो 2012 में समाधान और परियोजना है।

प्रोजेक्ट packages.configके रूट में प्रोजेक्ट फ़ाइल है।

इस प्रश्न के प्रयोजनों के लिए, मान लें कि मैंने गलती से इन पुस्तकालयों Referencesको अपनी परियोजना के अनुभाग से हटा दिया है ।

जब NuGet पैकेज मैनेजर में जा रहे हैं, इंटरफ़ेस अभी भी इन पैकेजों के बगल में एक टिक की रिपोर्ट कर रहा है, यह दर्शाता है कि वे स्थापित हैं।

एकमात्र तरीका मैं यह देख सकता हूं कि इस स्थिति को कैसे ठीक किया जाए packages.config, जिससे सभी प्रविष्टियों को हटा दिया जाए , जो उन्हें स्थापित किए गए रिपोर्टिंग के रूप में NuGet इंटरफ़ेस के मुद्दे को ठीक कर देगा और प्रत्येक को फिर से जोड़ देगा।

क्या कोई स्मार्ट तरीका है? मुझे उम्मीद थी कि 'लापता पैकेजों को बहाल करने के लिए एनगेट को सक्षम करने' से यह हल हो जाएगा, लेकिन यह कुछ भी करने के लिए प्रतीत नहीं होता है।

जवाबों:


329

संकुल को पुनः स्थापित करने का प्रयास करें

NuGet पैकेज प्रबंधक कंसोल में निम्न कमांड दर्ज करें:

Update-Package -Reinstall -ProjectName Your.Project.Name

यदि आप पैकेजों को फिर से स्थापित करना चाहते हैं और पूरे समाधान के लिए संदर्भ बहाल करते हैं तो -ProjectNameपैरामीटर को छोड़ दें ।


10
लिंक का अंग्रेजी अनुवाद: Translate.google.com/…
Csaba Toth

18
नोट: यह कमांड कंसोल में चुनी गई परियोजना के बजाय वर्तमान में विजुअल स्टूडियो में खुलने वाली सभी परियोजनाओं के संदर्भों को पुनर्स्थापित करेगा ।
सिंबल

3
यह कमांड केवल चयनित प्रोजेक्ट में ही नहीं, पूरे समाधान में संकुल को फिर से स्थापित करेगा!
एलेक्स सोरोकोलेटोव

14
बेहद खतरनाक !!!! यदि प्रक्रिया बाधित हो जाती है, तो आप अपने सभी पैकेज संदर्भों को नुकसान पहुंचाएंगे और आपके समाधान में हर परियोजना में एक-एक-एक को जोड़ने की आवश्यकता होगी।
बिल वेलास्केज़

2
@BillVelasquez इस बात ने मेरे सभी संदर्भों को खा लिया। ठीक है, भगवान को धन्यवाद के लिए धन्यवाद, मुझे लगता है।
21

44

काम करने के लिए अनुपलब्ध पैकेज के लिए आपको वीएस समाधान स्तर पर NuGet पैकेज को पुनर्स्थापित करने में सक्षम करने की आवश्यकता है ।

यहां छवि विवरण दर्ज करें


43
यह NuGet को लापता पैकेज को। \ संकुल \ निर्देशिका में फिर से डाउनलोड करने की अनुमति देगा, लेकिन लापता परियोजना संदर्भों को बहाल करने से कोई लेना-देना नहीं है , जो कि पोस्टर के बारे में पूछ रहा था।
ब्रेंट बॉबी

13

यदि यह किसी के लिए मदद करता है, तो मेरे लिए, उपरोक्त में से कोई भी पर्याप्त नहीं था। मैं अभी भी निर्माण नहीं कर सका, वीएस अभी भी संदर्भ नहीं मिल सका। कुंजी बस को बंद करने और पैकेज को पुनर्स्थापित करने के बाद समाधान को फिर से खोलना था

यहाँ परिदृश्य है (विजुअल स्टूडियो 2012 का उपयोग करके):

आप एक समाधान खोलें जिसमें अनुपलब्ध पैकेज हैं। संदर्भ बताते हैं कि वीएस उन्हें नहीं मिल सकता है। रहे हैं कई मायनों लापता संकुल बहाल करने के लिए भी शामिल है,

  • एक ऐसा समाधान बनाना जो ऑटो-रिस्टोर में सेट हो
  • पैकेज प्रबंधक कंसोल खोलना और अच्छा "पुनर्स्थापना" बटन पर क्लिक करना
  • कर nuget restoreआप कमांड लाइन nuget स्थापित करता है, तो

लेकिन कोई फर्क नहीं पड़ता कि क्या दृष्टिकोण, उन संदर्भों को अभी भी लापता के रूप में दिखाया जाएगा। और जब आप निर्माण करेंगे तो यह विफल हो जाएगा। आह। हालाँकि यदि आप समाधान को बंद करते हैं और इसे फिर से खोलते हैं, तो अब VS उन अच्छे <HintPath>s को फिर से जाँचता है , पाता है कि पैकेज वापस वहीं हैं जहाँ वे हैं, और दुनिया के साथ सब ठीक है।

अपडेट करें

क्या विज़ुअल स्टूडियो अभी भी यह नहीं देख रहा है कि आपके पास पैकेज है? अभी भी एक संदर्भ दिखा रहा है कि यह हल नहीं हो सकता है? सुनिश्चित करें कि आपके द्वारा बहाल किए गए पैकेज का संस्करण <HintPath>आपके .csproj फ़ाइल के समान ही है । यहां तक ​​कि एक छोटी बग फिक्स संख्या (उदाहरण के लिए 1.10.1 से 1.10.2) असफल होने का संदर्भ देगी। आप इसे सीधे अपने csproj xml को संपादित करके, या फिर संदर्भ को हटाकर और संकुल निर्देशिका में नए बहाल किए गए संस्करण की ओर इशारा करते हुए नया बना सकते हैं।


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

.csprojसुनिश्चित करने के लिए फ़ाइल का संपादन करना कि मेरे लिए काम किए गए संस्करण संख्याएँ मेल खाती हैं। धन्यवाद!
मतीन उलहाक

11

जबकि @jmfenoll द्वारा प्रदान किया गया समाधान काम करता है, यह नवीनतम पैकेजों के लिए अद्यतन करता है। मेरे मामले में, बीटा 2 (प्रीलेरेज़) को स्थापित करने से यह सभी आरसी 1 (जिसमें बग था) के सभी लिबास अपडेट हो गए। इस प्रकार उपरोक्त समाधान नौकरी का केवल आधा हिस्सा करता है।

यदि आप वैसी ही स्थिति में हैं जैसा कि मैं हूं और आप अपने प्रोजेक्ट को उस एनगेट पैकेज के सटीक संस्करण के साथ सिंक्रोनाइज़ करना चाहेंगे, जो आपके पास है या आपके द्वारा निर्दिष्ट है packages.config, तो, यह स्क्रिप्ट आपकी मदद कर सकती है। बस अपने पैकेज मैनेजर कंसोल में कॉपी और पेस्ट करें

function Sync-References([string]$PackageId) {
  get-project -all | %{
    $proj = $_ ;
    Write-Host $proj.name; 
    get-package -project $proj.name | ? { $_.id -match $PackageId } | % { 
      Write-Host $_.id; 
      uninstall-package -projectname $proj.name -id $_.id -version $_.version -RemoveDependencies -force ;
      install-package -projectname $proj.name -id $_.id -version $_.version
    }
  }
}

और फिर इसे या तो एक sepific पैकेज नाम के साथ निष्पादित करें

Sync-References AutoMapper

या जैसे सभी पैकेजों के लिए

Sync-References

क्रेडिट्स दान हेवुड और उनके ब्लॉग पोस्ट पर जाते हैं


8

पैकेज स्क्रिप्ट कंसोल कंसोल विंडो में निम्न स्क्रिप्ट को चलाया जा सकता है, और उन्हें पुनः स्थापित करने से पहले आपके समाधान में प्रत्येक प्रोजेक्ट से सभी पैकेजों को हटा देगा।

foreach ($project in Get-Project -All) { 
    $packages = Get-Package -ProjectName $project.ProjectName
    foreach ($package in $packages) {
        Uninstall-Package $package.Id -Force -ProjectName $project.ProjectName
    }
    foreach ($package in $packages) {
        Install-Package $package.Id -ProjectName $project.ProjectName -Version $package.Version
    }
}

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


3

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


यह सबसे सरल उपाय है। यह सिर्फ पैकेज फ़ोल्डर ब्राउज़ करके मेरे लिए काम करता है।
हाओ गुयेन

2

विज़ुअल स्टूडियो 2015 में (सॉल्यूशन सोर्स कंट्रोल, एमवीसी-प्रोजेक्ट) के तहत है, सीएसनो ने Update-Package -Reinstall -ProjectName Your.Project.Nameकाम किया है, लेकिन इसने कुछ लॉक्स के साथ खिलवाड़ किया।

मुझे पहले "संकुल" को हटाना होगा, मैन्युअल रूप से पहले। (ऐसा लगता था कि स्रोत नियंत्रण के कारण बंद था)।

इसके अलावा, मुझे नुगेट पैकेज मैनेजर से एमवीसी-पैकेज को फिर से स्थापित करना पड़ा।


2

यह स्क्रिप्ट निर्भरता को गड़बड़ाने या बिना किसी आशंका के हटाए गए निर्भरता को स्थापित करने के बिना किसी प्रोजेक्ट के सभी पैकेजों को पुनः स्थापित करेगा। (उनके भाग पैकेज डेवलपर्स के लिए और अधिक।)

Update-Package -Reinstall -ProjectName Proteus.Package.LinkedContent -IgnoreDependencies

1

बस मामले में यह किसी की मदद करता है - मेरे परिदृश्य में, मेरे पास कुछ साझा पुस्तकालय हैं (जिनकी अपनी टीएफएस परियोजनाएं / समाधान हैं) सभी एक समाधान में संयुक्त हैं।

Nuget सफलतापूर्वक परियोजनाओं को पुनर्स्थापित करेगा, लेकिन DLL अनुपलब्ध होगा।

अंतर्निहित समस्या यह थी कि, आपके समाधान के पास अपने स्वयं के संकुल फ़ोल्डर हैं और उन्हें उस फ़ोल्डर में सही ढंग से पुनर्स्थापित किया है, प्रोजेक्ट फ़ाइल (जैसे .csproj) एक अलग परियोजना को संदर्भित कर रही है जिसमें पैकेज डाउनलोड नहीं हो सकता है। एक पाठ संपादक में फ़ाइल खोलें, यह देखने के लिए कि आपके संदर्भ कहां से आ रहे हैं।

यह तब हो सकता है जब विभिन्न इंटरलिंक्ड शेयर्ड सॉल्यूशंस पर पैकेज का प्रबंधन करना - चूंकि आप शायद यह सुनिश्चित करना चाहते हैं कि सभी DLL उसी स्तर पर हैं जो आप इसे शीर्ष स्तर पर सेट कर सकते हैं। इसका मतलब यह है कि कभी-कभी यह संदर्भित DLL के लिए पूरी तरह से अलग समाधान में दिखाई देगा और इसलिए यदि आपके पास डाउनलोड किए गए और अप-टू-डेट सभी परियोजनाएं / समाधान नहीं हैं, तो आपको उपरोक्त समस्या मिल सकती है।


1

मुझे @ जूरी से सहमत होना होगा कि jmfenoll द्वारा बेहद लोकप्रिय उत्तर पूर्ण नहीं है। टूटे हुए संदर्भों के मामले में, मैं प्रस्तुत करता हूं कि अधिकांश समय आप नवीनतम पैकेज को अपडेट नहीं करना चाहते हैं , लेकिन केवल उन वर्तमान संस्करणों के लिए अपने संदर्भों को ठीक करें जिन्हें आप उपयोग कर रहे हैं। और जूरी ने ऐसा करने के लिए एक आसान कार्य प्रदान किया ।Sync-References

लेकिन हम अभी थोड़ा आगे जा सकते हैं, जिससे प्रोजेक्ट के साथ-साथ पैकेज को भी फ़िल्टर करने की सुविधा मिल सके:

function Sync-References([string]$PackageId, [string]$ProjectName) {
    get-project -all | 
    Where-Object { $_.name -match $ProjectName } |
    ForEach-Object {
        $proj = $_ ;
        Write-Output ('Project: ' + $proj.name)
        Get-Package -project $proj.name |
        Where-Object { $_.id -match $PackageId } |
        ForEach-Object { 
            Write-Output ('Package: ' + $_.id)
            uninstall-package -projectname $proj.name -id $_.id -version $_.version -RemoveDependencies -force
            install-package -projectname $proj.name -id $_.id -version $_.version
        }
    }
}

1

लापता संदर्भों के साथ मेरे पास एक ही मुद्दा था। मेरे परिदृश्य के नीचे:

  • ताजा विंडोज 10 मशीन और वीएस कम्युनिटी 2015 स्थापित करें
  • बस TFS के माध्यम से रिपॉजिटरी कोड की जाँच की
  • एक समाधान सिर्फ ठीक बनाया गया था, एक समाधान में लापता संदर्भ (EF, System.Http, उदाहरण के लिए) के साथ एक परियोजना थी, लेकिन सापेक्ष नगेट पैकेज ठीक से स्थापित थे।

प्रोजेक्ट के सभी वर्जन नंबर और पैकेज मेल खाते हैं, नगेट रिस्टोर (अपने सभी तरीकों से) काम नहीं करता है।

मैंने इसे कैसे तय किया: बस समाधान में रूट में पैकेज फ़ोल्डरों को हटा दें और नगेट रिस्टोर को निष्पादित करें। इस बिंदु पर dll को सही ढंग से डाउनलोड किया गया है और लापता संदर्भों के लिए जोड़ा जा सकता है।


0

मैं इस मुद्दे से बहुत अधिक पीड़ित था, मेरे मामले में लापता नूगेट को डाउनलोड करना चेक किया गया था (लेकिन यह उन्हें पुनर्स्थापित नहीं कर रहा है) और मैं अनइंस्टॉल और पुनः स्थापित नहीं कर सकता क्योंकि मैंने कुछ स्थापित पैकेजों को संशोधित किया है ... इसलिए:

मैंने सिर्फ कैश्ड और पुनर्निर्माण को मंजूरी दी और यह काम किया। (उपकरण-विकल्प-नुगेट पैकेज मैनेजर - जनरल)

यह लिंक भी https://docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore मदद करता है ।


0
  1. पैकेज को कॉपी करें। प्रोजेक्ट की फाइल को कॉन्फ़िगर करें और सभी संस्करण को संशोधित करें
  2. सभी पैकेज को अनइंस्टॉल करें और हटा दें

    $packages = Get-Package -ProjectName [nameOfProjectToRestore]
    foreach ($package in $packages) {
        uninstall-package  -projectname [nameOfProjectToRestore] -id $package.Id -version $package.version -RemoveDependencies -force ;
    }
    
  3. प्रोजेक्ट के रूट में संकुल फ़ोल्डर साफ़ करें

  4. वेबसाइट के रूट फोल्डर में मॉडिफाई पैकेज.कॉन्फिग को कॉपी करें

  5. प्रोजेक्ट को पुनर्स्थापित करने के लिए इस कोड को चलाएँ

    $packages = Get-Package -ProjectName [nameOfProjectToRestore]
    foreach ($package in $packages) {
        uninstall-package  -projectname [nameOfProjectToRestore] -id $package.Id -version $package.version -RemoveDependencies -force ;
    }
    foreach ($package in $packages) {
        install-package  $package.Id -ProjectName [nameOfProjectToRestore] -Version $package.Version
    }
    
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.