visual studio 2012 - Nuget संदर्भ बहाल करना?




visual-studio-2012 (9)

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

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

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

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

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

क्या कोई चालाक तरीका है? मैंने आशा की थी कि 'लापता पैकेज को पुनर्स्थापित करने के लिए सक्षम करें' सक्षम करने से यह हल हो जाएगा, लेकिन ऐसा कुछ नहीं लगता है।


  1. प्रोजेक्ट की packages.config फ़ाइल कॉपी करें और सभी संस्करण संशोधित करें
  2. सभी पैकेज unistall और depencies को हटा दें

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

  4. वेबसाइट के रूट फ़ोल्डर में package.config को संशोधित करें

  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
    }
    

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

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

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

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

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

अद्यतन करें

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


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

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

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
    }
  }
}

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

Sync-References AutoMapper

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

Sync-References

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


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

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
    }
}

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


मुझे @ जुरी से सहमत होना है कि 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
        }
    }
}

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

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

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


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


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

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

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

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

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

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





nuget