मैं विजुअल स्टूडियो में NuGet पैकेज रिस्टोर को कैसे सक्षम करूं?


272

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

मुझे VS2015 में प्रदर्शित होने के लिए "सक्षम नूगेट पैकेज रिस्टोर" विकल्प कैसे मिलेगा?

मैंने फ़ाइल> नई परियोजना को चुना और एक रिक्त ASP.NET वेब अनुप्रयोग बनाया । मैं इस मेनू विकल्प की तलाश कर रहा हूं।

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

मुझे यह उल्लेख करना चाहिए कि मैंने अपने प्रोजेक्ट फ़ोल्डर में पहले से मौजूद नूगेट फ़ाइलों की तलाश की है और कोई भी नहीं है।


4
सुनिश्चित करें कि आप अपने समाधान के खिलाफ यह कोशिश कर रहे हैं न कि वेब प्रोजेक्ट। डिफ़ॉल्ट रूप से समाधान तब प्रदर्शित नहीं होता है जब केवल एक परियोजना हो
JConstantine

1
हाँ, यह निश्चित रूप से एक आसान गलती है, लेकिन मैंने समाधान के खिलाफ जांच करना सुनिश्चित किया है, मुझे लगता है कि यह 2015 से संबंधित हो सकता है। जब मैं समान चरणों का पालन करता हूं तो सक्षम विकल्प VS2013 में उपलब्ध है।
डैन ब्यूलियू

2
मुझे भी। मैंने भी .nuget फ़ोल्डर को हटाने की कोशिश की, जो वीएस 2013 में सक्षम एनगेट पैकेज पुनर्स्थापना विकल्प को फिर से सक्रिय करता है लेकिन अभी भी कोई पासा नहीं है। मैं एक मौजूदा एमवीसी एप्लिकेशन खोलने की कोशिश कर रहा हूं जो वीएस 2013 में बनाया गया था।
विन्नी केली

4
@justanotherdev यह उपयोगी होगा यदि आप अपनी टिप्पणी को थोड़ा अधिक उत्पादक बनाने के लिए नए वर्कफ़्लो का संदर्भ प्रदान करते हैं।
अवंतप्रिम

1
मैंने hd में डेविड एगबो के लेख को ऑलिगॉफ़ेन द्वारा संदर्भित नहीं देखा था, इसलिए मैंने नोटपैड ++ में सिर्फ स्लन एंड स्प्स्रोज फाइलें खोलीं और उन अनुभागों को हटा दिया जो उन्होंने सचित्र किए थे। मेरे पास VS2015 में समाधान खुला था और, एक बार जब मैंने फाइलों को सहेज लिया, तो वीएस ने मुझे उन्हें फिर से लोड करने के लिए प्रेरित किया और मेरे समाधान के संदर्भ अब ठीक हैं और मेरा समाधान संकलित करता है। बहुत बहुत धन्यवाद, Vinney!
रिच वार्ड

जवाबों:


248

यह बहुत लंबा था लेकिन मुझे आखिरकार यह दस्तावेज स्वचालित पैकेज रिस्टोर के लिए माइग्रेटिंग MSBuild- एकीकृत समाधान पर मिला और मैं यहां वर्णित विधियों का उपयोग करके समस्या को हल करने में सक्षम था।

  1. '.nuget'समाधान निर्देशिका को समाधान से निकालें
  2. nuget.targetsअपने .csprojया .vbprojफ़ाइलों से सभी संदर्भ निकालें । हालांकि आधिकारिक तौर पर समर्थित नहीं है, यदि आपके पास बहुत सारी परियोजनाएं हैं , तो दस्तावेज़ को एक PowerShell स्क्रिप्ट से लिंक किया जाता है, जिसे साफ़ करने की आवश्यकता होती है। मैंने हाथ से खुद को संपादित किया इसलिए मैं इसके साथ अपने अनुभव के बारे में कोई प्रतिक्रिया नहीं दे सकता।

अपनी फ़ाइलों को हाथ से संपादित करते समय, यहां वह है जो आप देख रहे हैं:

समाधान फ़ाइल (.sln)

Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{F4AEBB8B-A367-424E-8B14-F611C9667A85}"
ProjectSection(SolutionItems) = preProject
    .nuget\NuGet.Config = .nuget\NuGet.Config
    .nuget\NuGet.exe = .nuget\NuGet.exe
    .nuget\NuGet.targets = .nuget\NuGet.targets
EndProjectSection
EndProject

परियोजना फ़ाइल (.csproj / .vbproj)

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

3
मुझे यहाँ कुछ याद आ रहा है। जब मैं इस पद्धति का उपयोग करता हूं, तो मेरे पास हर समाधान में स्थापित पैकेजों का एक नाव लोड होता है। मुझे 10 पैकेज के साथ एक समाधान मिला है और ठीक उसी पैकेज के साथ एक और समाधान है: 10 पैकेज वाले प्रत्येक में दो अलग-अलग निर्देशिकाएं बनाई गई हैं। इस पद्धति का उपयोग करके, आप अपने सभी पैकेजों को एक ही निर्देशिका में कैसे समेकित करते हैं (जैसे पुरानी VS2013 विधि NuGet.Config फ़ाइल को संपादित करके अनुमति देता है)?
क्वार्कली

एक .nuget फ़ोल्डर न देखें? संकुल फ़ोल्डर में फ़ोल्डर हटाने के बारे में समाधान देखें। यह संभव है कि आपका पैकेज आधा बहाल हो, और यह कचरा पूरी तरह से बहाल करने से रोक रहा है।
ग्रेग

वास्तव में यह समाधान था। इसके अतिरिक्त - मैंने प्रोजेक्ट बनाने से पहले "नगेट रिस्टोर" को जोड़ा है। नगेट पैकेज को ऑटो डाउनलोड किया जाता है, और प्रोजेक्ट बिल्ड इसके बाद ठीक काम करता है।
TarmoPikaro 12

5
थोड़ा सा समय बचाने के लिए, @VinneyKelly द्वारा बताई गई GitHub रिपॉजिटरी से निष्पादित करने वाली स्क्रिप्ट, migrateToAutomaticPackageRestore.ps1 है, इसका जादू, काम करता है!
रीगा

60

Microsoft ने VS2015 में 'Enable NuGet Package Restore' के लिए समर्थन छोड़ दिया है और आपको पुराने समाधानों को स्थानांतरित करने या नए समाधानों में सुविधा जोड़ने के लिए कुछ मैनुअल बदलाव करने की आवश्यकता है। नई सुविधा NuGet पैकेज रिस्टोर में बहुत अच्छी तरह से वर्णित है

मौजूदा परियोजनाओं के लिए एक माइग्रेशन गाइड भी है (जैसा कि पहले बताया गया है): नुगेट माइग्रेशन गाइड

जब उन्नयन:

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

नया प्रोजेक्ट बनाते समय:

  1. अपने Visual Studio 2015 समाधान में, .nuget नामक समाधान निर्देशिका बनाएँ।
  2. समाधान निर्देशिका (जहां .sln फ़ाइल रहती है) की वास्तविक निर्देशिका बनाएं और उसे कॉल करें। नोट करें (ध्यान दें कि समाधान निर्देशिका वास्तविक फ़ाइल सिस्टम निर्देशिका के समान नहीं है, भले ही उनका समान नाम हो)।
  3. Nuget.config नामक .nuget निर्देशिका में एक फ़ाइल बनाएँ।

  4. चरण # 2 में बनाई गई समाधान निर्देशिका में 'nuget.config' जोड़ें।

  5. निम्नलिखित पाठ को nuget.config फ़ाइल में रखें:

    <?xml version="1.0" encoding="utf-8"?> <configuration> <config> <add key="repositorypath" value="$\..\..\..\..\Packages" /> </config> <solution> <add key="disableSourceControlIntegration" value="true" /> </solution> </configuration>

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

चरण 5 करने के बाद आपको दृश्य स्टूडियो को पुनरारंभ करने की आवश्यकता है। जब तक आप ऐसा नहीं करते तब तक नुगेट परिवर्तनों को नहीं पहचान पाएंगे।

अंत में, आपको अनइंस्टॉल करने के लिए 'Nuget Package Manager for Solutions' का उपयोग करना होगा और फिर संकुल को फिर से स्थापित करना होगा। मुझे नहीं पता कि यह पॉवर्सशेल स्क्रिप्ट का एक साइड-इफ़ेक्ट था जिसे मैं चलाती थी या सिर्फ नुगेट को गियर में वापस किक करने के लिए एक विधि थी। जब मैंने ये सभी कदम उठाए, मेरे जटिल बिल्ड आर्किटेक्चर ने नए पैकेजों को नीचे लाने में त्रुटिपूर्ण काम किया जब मैंने TFVC से बाहर की परियोजनाओं की जाँच की।


1
क्यों nuget.targets फ़ाइल को हटाएं, क्या मुझे गायब होने पर एक सुसंगत निर्माण मिलेगा?
फ्रोड निल्सन

1
लक्ष्य अब आईडीई में एकीकृत होने के साथ-साथ 'nugget.exe' प्रदान करने के लिए उपयोग किए जाने वाले फ़ंक्शन के रूप में दिखाई देते हैं। केवल एक चीज जो आपको अभी भी चाहिए वह है कॉन्फ़िगरेशन।
क्वार्कली

1
DRAirey द्वारा बताए गए चरणों के अलावा, मुझे निम्नलिखित कार्य करने थे: 1) $ \ _ \ _ \ _ .. \ _ \ संकुल के बजाय, उपयोग किया गया ../../ (विंडोज़ पैरेंट पाथ कन्वेंशन, नहीं $ 2 की शुरुआत में) समाधान सहेजें, बंद करें और nuget.config के लिए फिर से खोलें और पैकेज इंस्टॉल द्वारा पढ़ा और सम्मानित किया जाए
सुधांशु मिश्रा

इसने मेरे नए VS2015 प्रोजेक्ट के लिए मदद की, जहाँ मैंने पैकेज की कामना की, और टीम के अन्य सदस्य NuGet निर्भरता के कारण पुनर्निर्माण नहीं कर सके।
azec-pdx

1
चरण 5 करने के बाद आपको दृश्य स्टूडियो को पुनरारंभ करने की आवश्यकता है। जब तक आप ऐसा नहीं करते तब तक नुगेट परिवर्तनों को नहीं पहचान पाएंगे।
बैरी कोलबैंक जूनियर

35

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


1
"पैकेज" फ़ोल्डर के अंदर फ़ोल्डर्स को हटाने के बाद नुगेट संकुल विंडो को बंद करने और फिर से खोलने का प्रयास करें।
इवान ब्रान्ट्स

6
+1 यह मेरे लिए काम करता है, ध्यान दें कि पुनर्स्थापना बटन विंडो के शीर्ष पर टैब के ठीक नीचे पॉप अप करता है। कहते हैं: "इस समाधान से कुछ NuGet पैकेज गायब हैं। अपने ऑनलाइन पैकेज स्रोतों से पुनर्स्थापित करने के लिए क्लिक करें।"
इरुजा

इतना सरल और आसान .. यह मेरे लिए काम किया .. लगता है कि यह अधिक मतदान का जवाब होना चाहिए :)
Nirman

इतना सरल और आसान। इसका उत्तर होना चाहिए।
एक्सल

क्या इस फ़ोल्डर को .gitignore फ़ाइल में जोड़ना एक अच्छा विचार नहीं होगा?
एक्सल

26

जैसा कि माइक द्वारा पहले ही उल्लेख किया गया है, VS2015 में 'इनेबल नूगेट पैकेज रिस्टोर' का कोई विकल्प नहीं है। आपको मैन्युअल रूप से पुनर्स्थापना प्रक्रिया को लागू करना होगा। एक अच्छा तरीका - फ़ाइलों और निर्देशिकाओं के साथ खिलवाड़ के बिना - NuGet पैकेज प्रबंधन कंसोल का उपयोग कर रहा है : 'क्विक स्टार्ट' फ़ील्ड (आमतौर पर ऊपरी दाएं कोने में) पर क्लिक करें, दर्ज करें console, प्रबंधन कंसोल खोलें, और कमांड दर्ज करें:

Update-Package reinstall

यह आपके समाधान में सभी परियोजनाओं के सभी पैकेजों को फिर से स्थापित करेगा। एकल प्रोजेक्ट निर्दिष्ट करने के लिए, दर्ज करें:

Update-Package reinstall -ProjectName MyProject

बेशक यह केवल तभी आवश्यक है जब Restoreबटन - कभी - कभी VS2015 द्वारा पेश किया गया - उपलब्ध नहीं है। अधिक उपयोगी अपडेट कमांड सूचीबद्ध हैं और यहां बताए गए हैं: https://docs.microsoft.com/en-us/nuget/consume-packages/reinstalling-and-updating-packages


बहुत बहुत धन्यवाद, मैं इसी तरह की समस्या थी। मैंने बस आपकी प्रक्रिया के माध्यम से मेरी समस्या को हल किया है। बहुत बहुत धन्यवाद
McElie

यहाँ एक ही, जो एक ही काम करता था और उसे हर जगह लिखी चीजों की एक गुच्छा की जरूरत नहीं थी
हार्वे लिन

सबसे उपयोगी जवाब यहाँ!
नव

13

यदि आपको कोई समस्या है या आप किसी भी पैकेज को याद नहीं कर रहे हैं, तो आप बस अपनी परियोजना में राइट-क्लिक करें और " समाधान के लिए NuGet पैकेज प्रबंधित करें ... " का चयन करें । इस पर क्लिक करने के बाद एक स्क्रीन खुलेगी जहाँ आपको एक मेन्यू बार दिखाई देगा जिसमें कहा गया है "रिस्टोर": पुनर्स्थापित

उस पर क्लिक करें और आवश्यक पैकेज स्वचालित रूप से स्थापित हो जाएंगे।
मेरा मानना ​​है कि यह वही है जो आप खोज रहे हैं, इससे मेरी समस्याएं हल हो गई हैं।


3
लेकिन यह केवल तभी मदद करता है जब वह अलर्ट बार दिखाता है, यह मेरे मामले में नहीं है।
निकोलस पीटरसन

2
एक पैकेज जो मैन्युअल रूप से एक पैकेज स्थापित करता है, एक स्वचालित पुनर्स्थापना के बिंदु को पूरी तरह से याद करता है।
क्वर्की

मेरा मानना ​​है कि यह संभवतः स्वीकृत उत्तर होना चाहिए, यह एक ही कार्यक्षमता है
user25064

1
मैं समाधान पर राइट क्लिक करके पुनर्स्थापित करने का विकल्प देख पा रहा था। यह "समाधान के लिए NuGet पैकेज प्रबंधित करें" के तहत था। मेरे लिए छल किया।
दरियाल

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


6

Vx20XX से VS2015 के लिए नगेट पैकेज के साथ प्रोजेक्ट्स को अपग्रेड करते समय, आपको नगेट पैकेज की समस्या हो सकती है।

त्रुटि संदेश का उदाहरण: यह प्रोजेक्ट NuGet पैकेज (संदर्भों) को संदर्भित करता है जो इस कंप्यूटर पर गायब हैं। उन्हें डाउनलोड करने के लिए NuGet पैकेज पुनर्स्थापना सक्षम करें।

अपडेट 2016-02-06: मेरे पास जानकारी का लिंक था लेकिन यह अब काम नहीं करता है। मुझे संदेह है कि हाल ही में एक समस्या ने हल किया है ???

मैंने अपनी समस्या को थोड़ा प्रोग्राम लिखने के लिए तय किया जो MSBuild- एकीकृत पैकेज रिस्टोर बनाम ऑटोमैटिक पैकेज रिस्टोर हो

आप यहां उपकरण के निष्पादन योग्य डाउनलोड कर सकते हैं

कृपया मुझे पता है परिणाम :-)!

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

संदर्भ के रूप में कोड:

<Window x:Class="FixNuGetProblemsInVs2015.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:FixNuGetProblemsInVs2015"
        mc:Ignorable="d"
        Title="Fix NuGet Packages problems in Visual Studio 2015 (By Eric Ouellet)" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"></ColumnDefinition>
            <ColumnDefinition Width="10"></ColumnDefinition>
            <ColumnDefinition></ColumnDefinition>
        </Grid.ColumnDefinitions>

        <TextBlock Grid.Row="0" Grid.Column="0">Root directory of projects</TextBlock>
        <Grid Grid.Row="0" Grid.Column="2">
            <Grid.ColumnDefinitions>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
            </Grid.ColumnDefinitions>

            <TextBox Grid.Column="0" Name="DirProjects"></TextBox>
            <Button Grid.Column="1" VerticalAlignment="Bottom" Name="BrowseDirProjects" Click="BrowseDirProjectsOnClick">Browse...</Button>
        </Grid>

        <!--<TextBlock Grid.Row="1" Grid.Column="0">Directory of NuGet Packages</TextBlock>
        <Grid Grid.Row="1" Grid.Column="2">
            <Grid.ColumnDefinitions>
                <ColumnDefinition></ColumnDefinition>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
            </Grid.ColumnDefinitions>

            <TextBox Grid.Column="0" Name="DirPackages"></TextBox>
            <Button Grid.Column="1"  Name="BrowseDirPackages" Click="BrowseDirPackagesOnClick">Browse...</Button>
        </Grid>-->

        <TextBox Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3" Name="TxtLog" IsReadOnly="True"></TextBox>

        <Button Grid.Row="3" Grid.Column="0" Click="ButtonRevertOnClick">Revert back</Button>
        <Button Grid.Row="3" Grid.Column="2" Click="ButtonFixOnClick">Fix</Button>
    </Grid>
</Window>


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Forms;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml;
using System.Xml.Linq;
using Application = System.Windows.Application;
using MessageBox = System.Windows.MessageBox;

/// <summary>
/// Applying recommanded modifications in section : "MSBuild-Integrated package restore vs. Automatic Package Restore"
/// of : http://docs.nuget.org/Consume/Package-Restore/Migrating-to-Automatic-Package-Restore
/// </summary>

namespace FixNuGetProblemsInVs2015
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            DirProjects.Text = @"c:\prj";
            // DirPackages.Text = @"C:\PRJ\NuGetPackages";
        }

        private void BrowseDirProjectsOnClick(object sender, RoutedEventArgs e)
        {
            FolderBrowserDialog dlg = new FolderBrowserDialog();
            dlg.SelectedPath = DirProjects.Text;
            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                DirProjects.Text = dlg.SelectedPath;
            }
        }

        //private void BrowseDirPackagesOnClick(object sender, RoutedEventArgs e)
        //{
        //  FolderBrowserDialog dlg = new FolderBrowserDialog();
        //  dlg.SelectedPath = DirPackages.Text;
        //  if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        //  {
        //      DirPackages.Text = dlg.SelectedPath;
        //  }
        //}

        // private string _dirPackages;

        private void ButtonFixOnClick(object sender, RoutedEventArgs e)
        {
            DoJob(false);
        }

        private void ButtonRevertOnClick(object sender, RoutedEventArgs e)
        {
            DoJob(true);
        }

        private void DoJob(bool revert = false)
        {
            TxtLog.Text = "";

            string dirProjects = DirProjects.Text;
            // _dirPackages = DirPackages.Text;

            if (!Directory.Exists(dirProjects))
            {
                MessageBox.Show("Projects directory does not exists: " + dirProjects);
                return;
            }

            //if (!Directory.Exists(_dirPackages))
            //{
            //  MessageBox.Show("Packages directory does not exists: " + _dirPackages);
            //  return;
            //}

            RecurseFolder(dirProjects, revert);
        }

        private void RecurseFolder(string dirProjects, bool revert = false)
        {
            if (revert)
            {
                Revert(dirProjects);
            }
            else
            {
                FixFolder(dirProjects);
            }

            foreach (string subfolder in Directory.EnumerateDirectories(dirProjects))
            {
                RecurseFolder(subfolder, revert);
            }
        }

        private const string BackupSuffix = ".fix_nuget_backup";

        private void Revert(string dirProject)
        {
            foreach (string filename in Directory.EnumerateFiles(dirProject))
            {
                if (filename.ToLower().EndsWith(BackupSuffix))
                {
                    string original = filename.Substring(0, filename.Length - BackupSuffix.Length);
                    if (File.Exists(original))
                    {
                        File.Delete(original);                                          
                    }
                    File.Move(filename, original);
                    Log("File reverted: " + filename + " ==> " + original);
                }
            }
        }

        private void FixFolder(string dirProject)
        {
            BackupFile(System.IO.Path.Combine(dirProject, "nuget.targets"));
            BackupFile(System.IO.Path.Combine(dirProject, "nuget.exe"));

            foreach (string filename in Directory.EnumerateFiles(dirProject))
            {
                if (filename.ToLower().EndsWith(".csproj"))
                {
                    FromProjectFileRemoveNugetTargets(filename);
                }
            }
        }

        private void BackupFile(string path)
        {
            if (File.Exists(path))
            {
                string backup = path + BackupSuffix;
                if (!File.Exists(backup))
                {
                    File.Move(path, backup);
                    Log("File backup: " + backup);
                }
                else
                {
                    Log("Project has already a backup: " + backup);
                }
            }
        }

        private void FromProjectFileRemoveNugetTargets(string prjFilename)
        {
            XDocument xml = XDocument.Load(prjFilename);

            List<XElement> elementsToRemove = new List<XElement>();

            foreach (XElement element in xml.Descendants())
            {
                if (element.Name.LocalName == "Import")
                {
                    var att = element.Attribute("Project");
                    if (att != null)
                    {
                        if (att.Value.Contains("NuGet.targets"))
                        {
                            elementsToRemove.Add(element);
                        }
                    }
                }

                if (element.Name.LocalName == "Target")
                {
                    var att = element.Attribute("Name");
                    if (att != null && att.Value == "EnsureNuGetPackageBuildImports")
                    {
                        elementsToRemove.Add(element);
                    }
                }
            }

            if (elementsToRemove.Count > 0)
            {
                elementsToRemove.ForEach(element => element.Remove());
                BackupFile(prjFilename);
                xml.Save(prjFilename);
                Log("Project updated: " + prjFilename);
            }
        }

        private void Log(string msg)
        {
            TxtLog.Text += msg + "\r\n";
        }

    }
}

कार्यक्रम ने मेरे समाधान में एक टन परियोजनाओं को परिवर्तित करने के लिए ठीक काम किया। नवीनतम संस्करण में "नूगेट पैकेज की निर्देशिका" फ़ील्ड है, लेकिन आउटपुट को प्रभावित करने के लिए ऐसा प्रतीत नहीं होता है। यह क्या करता है?
क्रिस्टोफर andrstrand

क्षमा करें, मुझे कोई पता नहीं है। मुझे संदेह है कि यह फ़ाइल की सामग्री पर निर्भर करेगा। शायद आप फ़ंक्शन को ट्रैक कर सकते हैं: "FromProjectFileRemoveNugetTargets" और देखें कि क्या आपकी फ़ाइल प्रभावित हो सकती है? उस बुरे उत्तर के लिए क्षमा करें, मुझे याद नहीं है कि मैंने क्या कोडित किया था :-(! मैं सिर्फ इतना जानता हूं कि मैंने सफलता के साथ 2 अलग-अलग कंप्यूटरों पर दो बार उपयोग किया है
एरिक ओउलेट ने

5

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


4

मुझे लगता है कि asp.net 4 परियोजना के लिए हम स्वचालित पुनर्स्थापना पर जा रहे हैं, इसलिए इसके लिए कोई आवश्यकता नहीं है। पुराने प्रोजेक्ट्स के लिए मुझे लगता है कि कन्वर्ट करने के लिए थोड़ा काम करना होगा।

http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore


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

4

इस दृष्टिकोण ने मेरे लिए काम किया:

  • VS2015 को बंद करें
  • VS2013 में अस्थायी रूप से समाधान खोलें और समाधान पर राइट क्लिक करके नगेट पैकेज को पुनर्स्थापित करें (मैंने पुनर्निर्माण भी किया था, लेकिन मुझे संदेह है कि इसकी आवश्यकता नहीं है)।
  • VS2013 को बंद करें
  • VS2015 में समाधान फिर से खोलें

आपने अब VS2015 में भी नगेट पैकेज रिस्टोर को सक्षम किया है।


4

नमूना परियोजना gplus-quickstart-csharp-master बनाने की कोशिश करते समय मुझे उसी समस्या का सामना करना पड़ा ।

मैंने बारीकी से त्रुटि संदेश देखा और इस त्रुटि पर काबू पाने से वर्कअराउंड पाया, उम्मीद है कि इससे मदद मिलेगी।

  • समाधान फ़ाइल पर राइट क्लिक करें और विंडोज़ एक्सप्लोरर में खोलें।
  • कॉपी .nuget फ़ोल्डर के साथ NuGet.Config, NuGet.exe, NuGet.targets (डाउनलोड लिंक या बस अन्य प्रोजेक्ट से कॉपी करें और प्रतिस्थापित)
  • समाधान के पुनर्निर्माण का प्रयास करें।

का आनंद लें !!


4

इवान ब्रैनेट्स का समाधान अनिवार्य रूप से मेरे लिए यह तय करता है, लेकिन कुछ और विवरण साझा किए जा सकते हैं।

मेरे मामले में, मैं वीएस 2015 में ऑटो पैकेज रिस्टोर और टीएफएस का उपयोग कर रहा था । यह सब बहुत डिफ़ॉल्ट सामान है।

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

आप इसे पहचान लेंगे क्योंकि संदर्भ में हल न होने के बारे में एक पीला विस्मयबोधक बिंदु होगा।

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


4

बंद करें वी.एस. पैकेज फ़ोल्डर के तहत सब कुछ हटा दें। अपने समाधान को फिर से खोलें। अपने प्रोजेक्ट पर राइट क्लिक करें, 'एनगेट पैकेज प्रबंधित करें ...' चुनें। आपको 'Nuget Package Manager' विंडो के शीर्ष पर एक पीली पट्टी दिखाई देगी, जो आपसे संकुल को पुनर्स्थापित करने के लिए कहेगी। इसने मेरे लिए काम किया है।


3

पैकेज मैनेजर कंसोल (विजुअल स्टूडियो, टूल्स> नुगेट पैकेज मैनेजर> पैकेज मैनेजर कंसोल): अपडेट-पैकेज -reinstall -प्रोजेक्ट नाम कमांड को चलाएँ जहां प्रभावित प्रोजेक्ट का नाम समाधान एक्सप्लोरर में दिखाई देता है। समाधान में सभी पैकेजों को पुनर्स्थापित करने के लिए अपने आप अपडेट-पैकेज-स्थापना रद्द करें का उपयोग करें। अपडेट-पैकेज देखें। आप चाहें तो सिंगल पैकेज को भी रीइंस्टॉल कर सकते हैं।

से https://docs.microsoft.com/en-us/nuget/quickstart/restore


1

जब आप पैकेज को स्थापित करने का प्रयास कर रहे हैं, तो कार्यक्रम चलाने का एक परिणाम भी हो सकता है। यदि आप पृष्ठभूमि में चल रहे हैं, तो यह धूसर हो जाता है, जब आप इसे क्लिक करने का प्रयास करते हैं।


1

यदि किसी और को Visual Studio 2017 में यह समस्या मिलती है, तो सुनिश्चित करें कि प्रोजेक्ट .sln फ़ाइल द्वारा खोला गया है और फ़ोल्डर नहीं, क्योंकि दृश्य स्टूडियो फ़ोल्डर द्वारा खोले जाने पर सेटिंग्स को नहीं उठाएगा। यह डिफ़ॉल्ट रूप से होता है यदि आप git के लिए Visual Studio ऑनलाइन सेवाओं का उपयोग कर रहे हैं।


1

के लिए नेट कोर परियोजनाओं , रन dotnet restoreया dotnet buildआदेश मेंNuGet Package Manager Console (जो स्वचालित रूप से बहाल चलता है)

से कंसोल चला सकते हैं

उपकरण> NuGet पैकेज प्रबंधक> पैकेज प्रबंधक कंसोल


1

मैंने इस्तेमाल किया msbuild /t:restore


क्रेडिट और स्रोत:

मेरी समस्या MSBuild के साथ थी इसलिए मैंने @Vinney केली के लिंक का अनुसरण किया : स्वचालित पैकेज पुनर्स्थापना के लिए MSBuild- एकीकृत समाधान माइग्रेट करना

तथा...

यह काम एक प्रकार का वृक्ष =]

MSBuild : msbuild /t:restoreकमांड का उपयोग करें , जो प्रोजेक्ट फ़ाइल में सूचीबद्ध संकुल को पुनर्स्थापित करता है ( PackageReference केवल)। केवल NuGet 4.x + और MSBuild 15.1+ में उपलब्ध है, जो विजुअल स्टूडियो 2017 के साथ शामिल हैं । nuget restoreऔर dotnet restoreदोनों लागू परियोजनाओं के लिए इस कमांड का उपयोग करते हैं।


मेरे मामले में / t: पुनर्स्थापना प्रोजेक्ट का निर्माण नहीं करता है इसके लिए मुझे कमांड का उपयोग / पुनर्स्थापना करना पड़ा
किशन वैष्णव

1

यदि बाकी सब विफल रहता है (या शायद उससे पहले) तो आप जांच कर सकते हैं कि क्या नूगेट पैकेज स्रोत है या नहीं। मैंने VS2017 स्थापित किया, और यह डिफ़ॉल्ट रूप से वहां नहीं था। मैंने सोचा कि यह अजीब तरह का था।

  1. टूल - नुगेट पैकेज मैनेजर - पैकेज मैनेजर सेटिंग्स
  2. संवाद के बाईं ओर 'पैकेज स्रोत' पर क्लिक करें।
  3. Nuget URL जोड़ने के लिए धन चिह्न (+) का उपयोग करें: https://api.nuget.org/v3/index.json

0

मुझे संकुल फ़ोल्डर को बंद करना पड़ा और पुनः खुला (VS2015) समाधान। मैं माइग्रेट नहीं कर रहा था और मेरे पास स्रोत नियंत्रण में जांचे गए पैकेज नहीं थे। मैं बस इतना कह सकता हूं कि कुछ गड़बड़ हो गई है और इसने इसे ठीक कर दिया है।


0

उपकरण के माध्यम से मेरी मदद की >>> Nuget Package Manager >>> सामान्य और फिर टिक विकल्प नूगेट को लापता पैकेज डाउनलोड करने की अनुमति दें और विजुअल स्टूडियो में निर्माण के दौरान लापता पैकेजों की स्वचालित रूप से जांच करें

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


0

मैं भी ऐसी ही समस्या का सामना कर रहा हूँ। मैं एक एमवीसी परियोजना जोड़ने की कोशिश कर रहा हूं जो विजुअल स्टूडियो 2015 पर बनाई गई थी जो मैंने विजुअल स्टूडियो 2019 पर बनाया था।

विजुअल स्टूडियो 2019 पर पहले से ही मौजूदा परियोजनाएं हैं, इसलिए इस मौजूदा परियोजना को जोड़ना जो मैंने वीएस 2015 पर बनाया था, इसी त्रुटि को ट्रिगर करता है। मैंने यहाँ सभी उत्तरों की कोशिश की है लेकिन यह समस्या को ठीक नहीं करता है।

मैंने जो किया वह सिर्फ समाधान फ़ोल्डर पर .nuget फ़ोल्डर में रखा गया है। मूल रूप से फ़ोल्डर का पदानुक्रम यह है:

Solution Folder (VS 2019)
  -> MVC 1 Project
  -> MVC 2 Project
  -> MVC 3 Project (Project that I am adding)
         -> .nuget folder (It contains a .nuget folder)

इसलिए समस्या तब ठीक की गई जब मैं समाधान फ़ोल्डर पर .nuget फ़ोल्डर ले गया:

    Solution Folder (VS 2019)
  -> MVC 1 Project
  -> MVC 2 Project
  -> MVC 3 Project (Project that I am adding)
  -> .nuget folder (It contains a .nuget folder)

0

वीएस 2019 संस्करण 16.4.4 समाधान लक्ष्यीकरण .NET कोर 3.1

यहां प्रस्तावित लगभग सभी समाधानों की कोशिश करने के बाद, मैंने वीएस को बंद कर दिया। जब मैंने इसे फिर से खोला, कुछ सेकंड के बाद सब ठीक हो गया ...


-4

और भी सरल, अपने समाधान के लिए एक .nuget फ़ोल्डर जोड़ें और 'रिस्टोर नगेट पैकेज' दिखाई देगा (यह सुनिश्चित करने के लिए कि काम करने के लिए nuget.exe की आवश्यकता है या नहीं)।

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