Jak włączyć Przywracanie pakietu NuGet w Visual Studio?

272

Jest podobny post na stosie, ale to nie pomaga w moim problemie, ponieważ używam Visual Studio 2015.

Jak mogę wyświetlić opcję „Włącz przywracanie pakietu NuGet” w VS2015?

Wybrałem Plik> Nowy projekt i utworzyłem pustą aplikację sieci Web ASP.NET . Szukam tej opcji menu.

wprowadź opis zdjęcia tutaj

Powinienem wspomnieć, że szukałem wcześniej istniejących plików nuGet w folderze projektu i nie ma żadnych.

Dan Beaulieu
źródło
4
Upewnij się, że próbujesz tego przeciwko swojemu rozwiązaniu, a nie projektowi internetowemu. Domyślnie rozwiązanie nie jest wyświetlane, gdy istnieje tylko jeden projekt
JConstantine
1
Tak, to zdecydowanie łatwy do popełnienia błąd, ale upewniłem się, że sprawdziłem rozwiązanie, myślę, że może to być związane z 2015 r. Opcja Włącz jest dostępna w VS2013, gdy wykonuję te same kroki.
Dan Beaulieu
2
To samo tutaj. Próbowałem nawet usunąć folder .nuget, który ponownie aktywuje opcję Włącz przywracanie pakietu NuGet w VS 2013, ale nadal nie ma kości. Próbuję otworzyć istniejącą aplikację MVC, która została utworzona w VS 2013.
Vinney Kelly
4
@ justanotherdev Przydałoby się odniesienie do nowego przepływu pracy, aby twój komentarz był bardziej produktywny.
avantprime 11.04.16
1
Nie widziałem artykułu Davida Ebbo, do którego odwołuje się oligofren, więc właśnie otworzyłem pliki sln & csproj w Notepad ++ i usunąłem sekcje, które zilustrowałem. Miałem rozwiązanie otwarte w VS2015 i po zapisaniu plików VS poprosił mnie o ich ponowne załadowanie, a moje odwołania do rozwiązań są w porządku, a moje rozwiązanie się kompiluje. Wielkie dzięki, Vinney!
Rich Ward

Odpowiedzi:

248

Trwało to zbyt długo, ale w końcu znalazłem ten dokument na temat migracji rozwiązań zintegrowanych z MSBuild do automatycznego przywracania pakietów i udało mi się rozwiązać problem przy użyciu opisanych tutaj metod.

  1. Usuń '.nuget'katalog rozwiązania wraz z rozwiązaniem
  2. Usuń wszystkie odniesienia do nuget.targetstwojego .csprojlub .vbprojplików. Dokument nie jest oficjalnie obsługiwany, ale łączy się ze skryptem PowerShell, jeśli masz wiele projektów, które wymagają oczyszczenia. Ręcznie zmodyfikowałem kopalnię ręcznie, więc nie mogę wyrazić opinii na temat moich doświadczeń z nią.

Podczas ręcznej edycji plików, oto czego będziesz szukać:

Plik rozwiązania (.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

Plik projektu (.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>
Vinney Kelly
źródło
3
Całkowicie mi czegoś brakuje. Kiedy używam tej metody, otrzymuję mnóstwo pakietów zainstalowanych w każdym dostępnym rozwiązaniu. Mam jedno rozwiązanie z 10 pakietami i drugie rozwiązanie z dokładnie tymi samymi pakietami: tworzone są dwa różne katalogi, z których każdy zawiera 10 pakietów. W jaki sposób za pomocą tej metody konsolidujesz wszystkie swoje paczki w jednym katalogu (tak jak stara metoda VS2013 pozwala na edycję pliku NuGet.Config)?
Quarkly,
Nie widzisz folderu .nuget? Idź sprawdź rozwiązania dotyczące usuwania folderów w folderze pakietów. Możliwe, że pakiet został przywrócony do połowy, a śmieci blokują jego pełne przywrócenie.
Greg
Rzeczywiście to było rozwiązanie. Dodatkowo - dodałem „przywracanie nugetu” przed rozpoczęciem budowy projektu. Pakiety nuget są automatycznie pobierane, a po tym kompilacja projektu działa poprawnie.
TarmoPikaro,
5
Aby zaoszczędzić trochę czasu, skrypt do wykonania z repozytorium GitHub wspomnianego przez @VinneyKelly to migrateToAutomaticPackageRestore.ps1, jego magia działa!
Ryga,
60

Firma Microsoft zrezygnowała z obsługi „Włączanie przywracania pakietów NuGet” w VS2015 i musisz dokonać ręcznych zmian w celu migracji starych rozwiązań lub dodania funkcji do nowych rozwiązań. Nowa funkcja została całkiem dobrze opisana w Przywracaniu pakietu NuGet .

Istnieje również przewodnik migracji dla istniejących projektów (jak wspomniano wcześniej): Przewodnik migracji NuGet

Podczas aktualizacji:

  1. nie usuwaj katalogu .nuget.
  2. Usuń pliki nuget.exe i nuget.targets.
  3. Pozostaw plik nuget.config.
  4. Ręcznie wyczyść każdy plik projektu z dowolnego odniesienia do celów NuGet. Wspomniany skrypt Powershell wydawał się zadawać więcej obrażeń niż pożytku.

Podczas tworzenia nowego projektu:

  1. W rozwiązaniu Visual Studio 2015 utwórz katalog rozwiązań o nazwie .nuget.
  2. Utwórz rzeczywisty katalog katalogu rozwiązania (w którym znajduje się plik .sln) i nazwij go .nuget (zwróć uwagę, że katalog rozwiązania nie jest taki sam jak rzeczywisty katalog systemu plików, mimo że mają taką samą nazwę).
  3. Utwórz plik w katalogu .nuget o nazwie nuget.config.

  4. Dodaj plik „nuget.config” do katalogu rozwiązania utworzonego w kroku 2.

  5. Umieść następujący tekst w pliku 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>

Ten plik konfiguracyjny pozwoli Ci skonsolidować wszystkie pakiety w jednym miejscu, dzięki czemu nie będziesz mieć 20 różnych kopii tego samego pakietu unoszących się w systemie plików. Ścieżka względna zmieni się w zależności od architektury katalogu rozwiązania, ale powinna wskazywać katalog wspólny dla wszystkich rozwiązań.

Po wykonaniu kroku 5. musisz ponownie uruchomić program Visual Studio. Nuget nie rozpozna zmian, dopóki tego nie zrobisz.

Wreszcie może być konieczne użycie „Menedżera pakietów Nuget dla rozwiązań” w celu odinstalowania, a następnie ponownej instalacji pakietów. Nie wiem, czy był to efekt uboczny uruchomionego przeze mnie skryptu Powershell, czy tylko sposób na ponowne włączenie NuGet. Po wykonaniu wszystkich tych kroków moja skomplikowana architektura kompilacji działała bezbłędnie przy obniżaniu nowych pakietów, gdy sprawdzałem projekty z TFVC.

Quarkly
źródło
1
Po co usuwać plik nuget.targets, czy otrzymam spójną kompilację, gdy jej brakuje?
Frode Nilsen,
1
Wygląda na to, że cele są teraz zintegrowane z IDE, a także z funkcją, którą udostępniał „nugget.exe”. Jedyne, czego potrzebujesz, to konfiguracja.
Quarkly
1
Oprócz kroków wymienionych przez DRAirey musiałem wykonać następujące czynności: 1) Zamiast $ \ .. \ .. \ .. \ .. \ Pakiety, używane ../../ (konwencja nadrzędna systemu Windows, nie $ na początku 2) Zapisz rozwiązanie, zamknij i ponownie otwórz, aby plik nuget.config został odczytany i uhonorowany przez instalację pakietu
Sudhanshu Mishra
Pomogło mi to w moim nowym projekcie VS2015, w którym wykonałem pakiety, a inni członkowie zespołu nie mogli odbudować z powodu zależności NuGet.
azec-pdx
1
Po wykonaniu kroku 5. musisz ponownie uruchomić program Visual Studio. Nuget nie rozpozna zmian, dopóki tego nie zrobisz.
Barry Colebank Jr
35

Opcjonalnie możesz usunąć wszystkie foldery z folderu „paczki” i wybrać „Zarządzaj pakietami NuGet dla rozwiązania ...”. W takim przypadku przycisk „Przywróć” pojawia się w systemie Windows z pakietami NuGet.

Ivan Branets
źródło
1
Spróbuj zamknąć i ponownie otworzyć okno pakietów NuGet po usunięciu folderów w folderze „paczek”.
Ivan Branets
6
+1 To działało dla mnie, zauważ, że przycisk przywracania pojawia się w górnej części okna, tuż pod kartą. Mówi: „Brakuje niektórych pakietów NuGet w tym rozwiązaniu. Kliknij, aby przywrócić ze źródeł pakietów online”.
Eruza,
Tak proste i łatwe .. to zadziałało dla mnie .. Chyba powinna to być bardziej głosowana odpowiedź :)
Nirman
Tak proste i łatwe. To powinna być odpowiedź.
Axel
Czy nie byłoby dobrym pomysłem dodanie tego folderu do pliku .gitignore?
Axel
26

Jak już wspomniano Mike, w VS2015 nie ma opcji „Włącz przywracanie pakietu NuGet”. Musisz ręcznie uruchomić proces przywracania. Dobrym sposobem - bez bałaganu w plikach i katalogach - jest użycie konsoli zarządzania pakietami NuGet : Kliknij w polu „Szybki start” (zwykle w prawym górnym rogu), wejdź console, otwórz konsolę zarządzania i wprowadź polecenie:

Update-Package reinstall

Spowoduje to ponowną instalację wszystkich pakietów wszystkich projektów w twoim rozwiązaniu. Aby określić pojedynczy projekt, wprowadź:

Update-Package reinstall -ProjectName MyProject

Oczywiście jest to konieczne tylko wtedy, gdy Restoreprzycisk - czasami oferowany przez VS2015 - nie jest dostępny. Bardziej przydatne polecenia aktualizacji są wymienione i wyjaśnione tutaj: https://docs.microsoft.com/en-us/nuget/consume-packages/reinstalling-and-updating-packages

Jack Miller
źródło
Wielkie dzięki, miałem podobny problem. Właśnie rozwiązałem mój problem za pomocą twojej procedury. Dziękuję bardzo
McElie
To samo tutaj, jedyny, który działał i nie potrzebuje wielu rzeczy napisanych wszędzie
Harvey Lin
Najbardziej przydatna odpowiedź tutaj!
Neo,
13

Jeśli masz jakiekolwiek problemy lub brakuje Ci pakietów, możesz po prostu kliknąć prawym przyciskiem myszy projekt i wybrać „ Zarządzaj pakietami NuGet dla rozwiązania ... ”. Po kliknięciu na to otworzy się ekran z paskiem menu „Przywróć”: Przywracać

Kliknij na niego, a wymagane pakiety zostaną zainstalowane automatycznie.
Wierzę, że tego właśnie szukasz, to rozwiązało moje problemy.

Yenthe
źródło
3
Ale to pomaga tylko wtedy, gdy pojawia się ten pasek alertu, w moim przypadku tak nie jest.
Nicholas Petersen
2
Krok polegający na ręcznym zainstalowaniu pakietu całkowicie pomija sens automatycznego przywracania.
Quarkly
Myślę, że to prawdopodobnie powinna być zaakceptowana odpowiedź, to ta sama funkcjonalność
user25064
1
Mogłem zobaczyć opcję przywracania, klikając prawym przyciskiem myszy rozwiązanie. Znajdował się tam pod „Zarządzaj pakietami NuGet dla rozwiązania”. Wykonał dla mnie lewę.
Daryl,
1
Nie działa dla mnie - widzę ostrzeżenia w rozwiązaniu dotyczące brakujących pakietów nuget, ale zarządzanie pakietami nuget nie daje mi możliwości ich pobrania. Nie mogę też budować i przywracać. Również polecenie przywracania nic nie robi.
Markus
7

Użyj tego polecenia, aby przywrócić wszystkie pakiety

dotnet restore
Abdus Salam Azad
źródło
Działa doskonale
JP..t
6

Podczas aktualizacji projektów z pakietami nuget z Vx20XX do VS2015 możesz mieć problem z pakietami nuget.

Przykład komunikatu o błędzie: Ten projekt odwołuje się do pakietów NuGet, których brakuje na tym komputerze. Włącz Przywracanie pakietu NuGet, aby je pobrać.

Aktualizacja 2016-02-06: Miałem link do informacji, ale to już nie działa. Podejrzewam, że ostatnia ścieżka rozwiązała problem?

Rozwiązałem problem z pisaniem małego programu, który wykonuje przywracanie zintegrowanego pakietu MSBuild vs. automatyczne przywracanie pakietu

Możesz pobrać plik wykonywalny tego narzędzia tutaj .

Daj mi znać wynik :-)!

wprowadź opis zdjęcia tutaj

Kod jako odniesienie:

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

    }
}
Eric Ouellet
źródło
Program działał dobrze w konwersji wielu projektów w moim rozwiązaniu. Najnowsza wersja ma również pole „Katalog pakietów NuGet”, ale nie wpłynęło to na wynik. Co to robi?
Christoffer Årstrand
Przepraszam, nie mam pojęcia. Podejrzewam, że będzie to zależeć od zawartości pliku. Być może możesz śledzić funkcję: „FromProjectFileRemoveNugetTargets” i sprawdzać, czy może to wpłynąć na twój plik? Przepraszam za tę złą odpowiedź, nie pamiętam, co napisałem :-(! Po prostu wiem, że z powodzeniem użyłem na 2 różnych komputerach
Eric Ouellet
5

Przejdź do References w studio wizualnym i sprawdź, których pakietów brakuje. Teraz kliknij prawym przyciskiem myszy Rozwiązanie w Visual i kliknij otwarty folder w eksploratorze plików. Teraz otwórz folder paczek i usuń folder brakujących paczek. Otwórz studio wizualne i po prostu zbuduj rozwiązanie. wszystkie brakujące pakiety zostaną przywrócone. Proszę, zaznacz to jako odpowiedź, jeśli pomogłem.

Sandip Jaiswal
źródło
4

Przypuszczam, że w przypadku projektu asp.net 4 przechodzimy do automatycznego przywracania, więc nie ma takiej potrzeby. W przypadku starszych projektów myślę, że potrzeba trochę pracy do konwersji.

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

Luca Morelli
źródło
Pewnie masz rację. Właśnie próbowałem utworzyć projekt, wykonując dokładnie te same kroki w VS2013 i było tam „Włącz przywracanie pakietu Nuget”. Dzięki za link, sprawdzę go teraz.
Dan Beaulieu
4

To podejście zadziałało dla mnie:

  • Zamknij VS2015
  • Otwórz rozwiązanie tymczasowo w VS2013 i włącz przywracanie pakietu nuget, klikając prawym przyciskiem myszy rozwiązanie (ja również przebudowałem, ale podejrzewam, że to nie jest potrzebne).
  • Zamknij VS2013
  • Ponownie otwórz rozwiązanie w VS2015

Włączyłeś teraz także odtwarzanie pakietu nuget w VS2015.

Håkon Seljåsen
źródło
4

Napotkałem ten sam problem podczas próby zbudowania przykładowego projektu gplus-quickstart-csharp-master .

Przejrzałem uważnie komunikat o błędzie i znalazłem obejście tego problemu, mam nadzieję, że to pomoże.

  • Kliknij prawym przyciskiem myszy plik rozwiązania i otwórz w Eksploratorze Windows.
  • Skopiuj folder .nuget za pomocą NuGet.Config, NuGet.exe, NuGet.targets ( link do pobrania lub po prostu skopiuj z innego projektu i go)
  • Spróbuj odbudować rozwiązanie.

Cieszyć się !!

Manoj Verma
źródło
4

Ivan Branets zasadzie to dla mnie naprawiło, ale można podać więcej szczegółów.

W moim przypadku byłem w VS 2015 przy użyciu automatycznego przywracania pakietów i TFS . To wszystko jest dość domyślne.

Problem polegał na tym, że gdy inny programista próbował uzyskać rozwiązanie z TFS, niektóre pakiety nie zostały w pełni przywrócone. (Dlaczego, nie jestem jeszcze tego pewien). Ale folder pakietów zawierał folder dla odniesienia i pakiet NuGet, ale nie był rozwijany (powiedzmy, że brakuje folderu lib zawierającego plik .dll.) Ta połowa tam, ale niezupełnie słuszna koncepcja uniemożliwiała przywrócenie pakietu.

Rozpoznasz to, ponieważ odniesienie będzie miało żółty wykrzyknik z powodu braku rozwiązania.

Tak więc rozwiązanie z usunięciem folderu wewnątrz pakietów usuwa przywrócić pakiet problem blokowania. Następnie możesz kliknąć prawym przyciskiem myszy na najwyższym poziomie rozwiązania, aby uzyskać opcję przywracania pakietów , a teraz powinno działać.

Greg
źródło
4

Zamknij VS. Usuń wszystko w folderze pakietów. Otwórz ponownie swoje rozwiązanie. Kliknij projekt prawym przyciskiem myszy i wybierz „Zarządzaj pakietami nuget ...”. Zobaczysz żółty pasek u góry okna „Menedżer pakietów Nuget” z prośbą o przywrócenie pakietów. To zadziałało dla mnie.

Mandeep Janjua
źródło
3

Konsola Menedżera pakietów (Visual Studio, Narzędzia> NuGet Package Manager> Konsola Menedżera pakietów): Uruchom komendę Update-Package -reinstall -ProjectName, gdzie jest nazwa projektu, którego dotyczy problem, tak jak pojawia się ona w Eksploratorze rozwiązań. Użyj narzędzia Update-Package -reinstall, aby przywrócić wszystkie pakiety w rozwiązaniu. Zobacz pakiet aktualizacji. W razie potrzeby możesz także ponownie zainstalować pojedynczy pakiet.

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

Andreas
źródło
1

Może to również wynikać z uruchomienia programu podczas próby zainstalowania pakietu. jest wyszarzony, jeśli spróbujesz go kliknąć, gdy wbudowane usługi IIS działają w tle.

Katushai
źródło
1

Jeśli ktokolwiek znajdzie ten problem w Visual Studio 2017, upewnij się, że projekt jest otwarty przez plik .sln, a nie przez folder, ponieważ Visual Studio nie pobierze ustawień, jeśli zostanie otwarty przez folder. Dzieje się tak domyślnie, jeśli używasz usług online Visual Studio dla git.

Jacek
źródło
1

W przypadku projektów .NET Core uruchom dotnet restorelub uruchom dotnet buildkomendęNuGet Package Manager Console (które automatycznie uruchamia przywracanie)

Możesz uruchomić konsolę z

Narzędzia> NuGet Package Manager> Konsola menedżera pakietów

MOH3N
źródło
1

Kiedyś msbuild /t:restore.


Źródło i źródło:

Mój problem dotyczył MSBuild. Połączyłem się z linkiem @Vinney Kelly : Migracja zintegrowanych rozwiązań MSBuild do automatycznego przywracania pakietów

i...

To działało JAK CHARM =]

MSBuild : użyj msbuild /t:restorepolecenia, które przywraca pakiety pakietów wymienione w pliku projektu ( tylko PackageReference ). Dostępne tylko w NuGet 4.x + i MSBuild 15.1+, które są zawarte w Visual Studio 2017 . nuget restorei dotnet restoreoba używają tego polecenia do odpowiednich projektów.

Icchak
źródło
W moim przypadku / t: restore nie buduje projektu, dlatego musiałem użyć polecenia / restore
Kishan Vaishnav
1

Jeśli wszystko inne zawiedzie (a może wcześniej), możesz sprawdzić i sprawdzić, czy NuGet jest źródłem pakietu. Zainstalowałem VS2017 i NIE było tam domyślnie. Myślałem, że to trochę dziwne.

  1. Narzędzia - Menedżer pakietów NuGet - Ustawienia Menedżera pakietów
  2. Kliknij „Źródła pakietów” w lewym oknie dialogowym.
  3. Użyj znaku plus (+), aby dodać adres URL Nuget: https://api.nuget.org/v3/index.json
douglas.kirschman
źródło
0

Musiałem usunąć folder pakietów zamknij i ponownie otwórz (VS2015) rozwiązanie. Nie przeprowadzałem migracji i nie miałem pakietów sprawdzonych pod kontrolą źródła. Mogę tylko powiedzieć, że coś się popsuło i to naprawiło.

Chris Hammons
źródło
0

Pomógł mi przez Narzędzia >>> Menedżer pakietów Nuget >>> Ogólne, a następnie zaznacz opcję Pozwól Nuget pobierać brakujący pakiet i automatycznie sprawdzać brakujące pakiety podczas kompilacji w Visual Studio .

wprowadź opis zdjęcia tutaj

Anjan Kant
źródło
0

Mam ten sam problem. Próbuję dodać projekt MVC, który został utworzony w Visual Studio 2015, do rozwiązania, które wykonałem w Visual Studio 2019.

W Visual Studio 2019 istnieją już projekty, więc dodanie tego istniejącego projektu, który utworzyłem w VS 2015, powoduje ten sam błąd. Wypróbowałem wszystkie odpowiedzi tutaj, ale to nie rozwiązuje problemu.

Po prostu umieściłem folder .nuget w folderze rozwiązania. Oryginalnie hierarchia folderu jest następująca:

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)

Tak więc problem został rozwiązany, gdy przeniosłem folder .nuget do samego folderu rozwiązania:

    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)
Willy David Jr
źródło
0

Wersja VS 2019 16.4.4 Rozwiązanie ukierunkowane na .NET Core 3.1

Po wypróbowaniu prawie wszystkich zaproponowanych tutaj rozwiązań zamknąłem VS. Kiedy go ponownie otworzyłem, po kilku sekundach wszystko wróciło do normy ...

Andrea Antonangeli
źródło
-4

Jeszcze prościej, dodaj folder .nuget do swojego rozwiązania, a pojawi się „Restore Nuget Packages” (nie jestem pewien, czy nuget.exe musi być obecny, aby działał).

Paxton
źródło