Przywracanie pakietu NuGet nie działa

165

Zaewidencjonowałem projekt na jednym komputerze, wyewidencjonowałem na innym i stwierdziłem, że brakuje plików binarnych zainstalowanych przez NuGet. Mógłbym również sprawdzić je w kontroli źródła, ale wygląda na to, że istnieje lepsze rozwiązanie:

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

Postępowałem zgodnie z tymi instrukcjami, teraz mam .nugetfolder, w którym powinien być, w moim pliku .csproj znajdują się następujące wpisy:

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

a jednak kiedy odbudowuję moje rozwiązanie, brakujące pakiety nie są przywracane.

czego mi brakuje? Jak mogę zdiagnozować ten problem?

Eric J.
źródło
Czy widzisz wyzwalanie NuGet.exe w dzienniku wyjściowym?
Pranav
I co ważne: czy widzisz jakieś błędy w dzienniku wyjściowym?
maartenba

Odpowiedzi:

272

Należy pamiętać, że można wymusić wykonanie przywracania pakietów, uruchamiając następujące polecenia w konsoli menedżera pakietów NuGet

Update-Package -Reinstall

Wymusza ponowną instalację wszystkiego w rozwiązaniu.


Update-Package -Reinstall -ProjectName myProj

Wymusza ponowną instalację wszystkiego w projekcie myProj.

Uwaga : to jest opcja jądrowa. Używając tego polecenia, możesz nie otrzymać tych samych wersji zainstalowanych pakietów, co może prowadzić do problemów. Jest to mniej prawdopodobne na poziomie projektu niż na poziomie rozwiązania.

Można użyć -safeopcji parametru wiersza polecenia, aby ograniczyć aktualizacje do nowszych wersji z tym samym składnikiem wersji głównej i pomocniczej. Ta opcja została dodana później i rozwiązuje niektóre problemy wymienione w komentarzach.

Update-Package -Reinstall -Safe

Chris Marisic
źródło
7
@ NightOwl888 to brzmi jak coś, co wymaga zgłoszenia do nuget, ponieważ nie powinno być możliwości, aby to zrobić, chyba że faktycznie zawsze miałeś problemy z wiązaniem piekła DLL i na szczęście działało, ale ponowna instalacja zakończyła twoje szczęście, że działało.
Chris Marisic,
4
@nightowl, jeśli używasz kontroli źródła, wycofanie zmian nie powinno być trudne.
ErikE
4
Główną wadą jest to, że wersje pakietów nie są obsługiwane, więc zostanie zainstalowana najnowsza wersja pakietu. Może to być problem, jeśli Twój projekt nie jest kompatybilny z nową wersją ..
JDandChips
4
Tak, pakiet Update-Package -Reinstall działał dla mnie. Nie mam pojęcia, dlaczego IDE po prostu tego nie robi. Wszystko jest ustawione poprawnie. Ugghh, przysięgam, NuGet jest zarówno dobry, jak i denerwujący.
Jeremy Ray Brown
2
miło z twojej strony, że dodałeś „ważne! to może zniszczyć twój projekt” u dołu twojej odpowiedzi!
devman
25

Dla innych, którzy natkną się na ten post, przeczytaj to.

Program NuGet 2.7+ wprowadził nas do automatycznego przywracania pakietów . Jest to uważane za znacznie lepsze podejście w przypadku większości aplikacji, ponieważ nie narusza procesu MSBuild. Mniej bólów głowy.

Kilka linków ułatwiających rozpoczęcie pracy:

Dave New
źródło
2
Dziękujemy za odpowiedź odpowiednią dla aktualnej wersji NuGet.
Eric J.
20

Musisz wybrać jedną z następujących możliwości:

Ponowna instalacja pakietu według jego nazwy we wszystkich projektach rozwiązania:

Update-Package –reinstall <packageName>

Ponowna instalacja pakietu według jego nazwy i ignorowanie jego zależności we wszystkich projektach rozwiązania:

Update-Package –reinstall <packageName> -ignoreDependencies

Ponowna instalacja pakietu według jego nazwy w projekcie:

Update-Package –reinstall <packageName> <projectName>

Ponowna instalacja wszystkich pakietów w określonym projekcie:

Update-Package -reinstall -ProjectName <projectName>

Ponowna instalacja wszystkich pakietów w rozwiązaniu:

Update-Package -reinstall 
Mohammad Dayyan
źródło
Szybko i brudno rozwiązałem mój problem.
blackorchid
20

Czy włączyłeś tryb przywracania pakietów w projekcie, który ma brakujące pakiety / pliki binarne? Istnieje znany problem, który wymaga poprawnej instalacji pakietów podczas włączania trybu przywracania:

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


Oryginalny link jest martwy; może to być zamiennik: https://github.com/NuGet/Home/issues/1968

Alexandre Dion
źródło
3
Dzięki za link. Włączenie trybu przywracania pakietów w projekcie, w którym brakuje pakietów / plików binarnych, będzie typowym przypadkiem. Jeśli nie masz paczek, to właśnie wtedy chcesz je zdobyć. Niepowodzenie przypadku użycia.
Anthony
2
Kiedy mówisz „włącz tryb przywracania pakietów w projekcie, który ma brakujące pakiety”, co masz na myśli? Czy jest jakieś polecenie konsoli, które muszę uruchomić, aby to zrobić?
CodeWarrior
90
NuGet zawodzi mnie na co dzień, całkowicie nim gardzę.
Jammer
14

VS 2017

Narzędzia> Menedżer pakietów NuGet> Ustawienia Menedżera pakietów> Ogólne Kliknij opcję „Wyczyść wszystkie pamięci podręczne NuGet”

Niaz Morshed
źródło
Podczas sprawdzania rozwiązania poza kontrolą źródła (zarządzanego za pomocą programu Visual Studio Team Explorer z DevOps / Git) kompilacje nie były możliwe z powodu brakujących odwołań, a pakiety przywracania nic nie robiły. To rozwiązanie było właściwe w tej sytuacji.
PJRobot
12

Napotkałem ten problem w dwóch scenariuszach.

Po pierwsze, kiedy próbuję zbudować moje rozwiązanie z wiersza poleceń przy użyciu programu msbuild.exe. Po drugie, kiedy próbuję zbudować sln i zawierające je projekty na moim serwerze kompilacji przy użyciu TFS i CI.

Pojawiają się błędy z twierdzeniem, że brakuje referencji. Podczas sprawdzania zarówno mojego lokalnego katalogu kompilacji, jak i serwera TFS widzę, że folder / packages nie jest tworzony, a pakiety NuGet nie są kopiowane. Postępuj zgodnie z instrukcjami podanymi w odpowiedzi Alexandre'a http://nuget.codeplex.com/workitem/1879 również nie działa dla mnie.

Włączyłem pakiety przywracania za pośrednictwem VS2010 i widziałem, że kompilacje działają tylko z poziomu VS2010. Ponownie, użycie msbuild kończy się niepowodzeniem.Moje obejście jest prawdopodobnie całkowicie nieprawidłowe, ale w moim środowisku wszystko działało z lokalnej kompilacji wiersza poleceń, a także z kompilacji CI w TFS.

Wszedłem do. \ Nuget i zmieniłem ten wiersz w pliku .nuget \ NuGet.targets:

z:

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

to: (uwaga, bez cudzysłowów wokół zmiennych)

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

Rozumiem, że jeśli moje katalogi zawierają spacje, to się nie powiedzie, ale nie mam spacji w moich katalogach, więc to obejście sprawiło, że moje kompilacje zakończyły się pomyślnie ... na razie.

Powiem, że włączenie rejestrowania poziomu diagnostycznego w kompilacji pomoże pokazać, jakie polecenia są wykonywane przez msbuild. To właśnie doprowadziło mnie do tymczasowego zhakowania pliku celów.

PerryM
źródło
Miałem problem z podwójnymi cudzysłowami i musiałem dokonać tej samej zmiany co Ty. Bardzo frustrujące!
Greg
5

Jeśli coś innego nie zadziałało, spróbuj:

  1. Zamknij projekt.
  2. Usuń folder pakietów w folderze rozwiązania.
  3. Otwórz ponownie projekt i ponownie przywróć pakiety Nugget.

Pracował dla mnie i łatwo jest spróbować.

Loaderon
źródło
2
To zadziałało dla mnie. W kroku 3 nie musiałem ręcznie przywracać pakietów - przywracały się one automatycznie po otwarciu projektu.
Tawab Wakil
5

Jeśli żadna z pozostałych odpowiedzi nie działa, wypróbuj następujące rozwiązanie, które było jedyną rzeczą, która działała dla mnie:

Znajdź swój .csprojplik i edytuj go w edytorze tekstu.

Znajdź <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">tag w swoim .csprojpliku i usuń cały blok.

Zainstaluj ponownie wszystkie pakiety w rozwiązaniu:

Update-Package -reinstall

Następnie należy przywrócić pakiety NuGet, myślę, że może to być przypadek poboczny, który występuje tylko wtedy, gdy przenosisz projekt do innej lokalizacji.

Jako Basson
źródło
To uratowało mnie przed całkowitym zwariowaniem. Dzięki!
Jeff Hay
4

Tylko w przypadku innych osób, które mogły napotkać ten problem, udało mi się go rozwiązać, zamykając program Visual Studio i ponownie otwierając projekt. Po załadowaniu projektu pakiety zostały przywrócone w fazie inicjalizacji.

Mike Perrenoud
źródło
4

Dla mnie miałem pusty tag NuGetPackageImportStamp w .csproj

<NuGetPackageImportStamp>
    </NuGetPackageImportStamp>

Najlepiej byłoby, gdyby zawierał ważny identyfikator GUID.

Usunięcie powyższego tagu, a następnie „Restore Nugets” działało u mnie.

anu
źródło
1

Czasami dzieje się coś dziwnego i używanie programu Visual Studio do automatycznego przywracania nie działa. W takim przypadku możesz użyć konsoli Menedżera pakietów NuGet. Jest to otwierane w programie Visual Studio z poziomu Narzędzia -> Menedżer pakietów NuGet -> Konsola Menedżera pakietów . Polecenia w konsoli są proste. Aby uzyskać pomoc kontekstową podczas wpisywania polecenia, po prostu naciśnij przycisk, a otrzymasz wszystkie opcje zaczynające się od wpisywanych liter. Jeśli więc pakiet nie jest zainstalowany, na przykład log4net, wpisz następujące polecenie:

Zainstaluj pakiet log4net

Możesz zrobić o wiele więcej, na przykład określić wersję do zainstalowania, zaktualizować pakiet, odinstalować pakiet itp.

Musiałem użyć konsoli, aby mi pomóc, gdy Visual Studio zachowywał się jak dziwak.

Jeremy Ray Brown
źródło
1

Automatyczne przywracanie pakietu zakończy się niepowodzeniem z jednego z następujących powodów:

  1. Nie usunięto plików NuGet.exe i NuGet.targets z folderu .nuget rozwiązania (który można znaleźć w folderze głównym rozwiązania)
  2. Nie włączono automatycznego przywracania pakietów w menu Narzędzia >> Opcje >> Menedżer pakietów NuGet >> Ustawienia ogólne.
  3. Zapomniałeś ręcznie usunąć odniesienia ze wszystkich swoich projektów do pliku Nuget.targets
  4. Musisz ponownie uruchomić program Visual Studio (przed ponownym uruchomieniem upewnij się, że proces został zabity z poziomu menedżera zadań).

Poniższy artykuł przedstawia bardziej szczegółowo, jak przejść do punktów 1-3: https://docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore

CShark
źródło
1
Jeśli chodzi o punkt 1, podane przez Ciebie łącze jest sprzeczne z Twoją radą: „Jeśli używasz TFS 1. Usuń pliki NuGet.exe i NuGet.targets z folderu .nuget rozwiązania. 2. Zachowaj plik NuGet.Config, aby kontynuować pomijanie dodawanie pakietów do kontroli źródła. "
Andrew Dennison,
1

Pakiety NuGet pękały po wykonaniu przywracania systemu w moim systemie, tworząc kopię zapasową przez około dwa dni. (W międzyczasie pakiety NuGet zostały zainstalowane). Aby to naprawić, musiałem przejść do folderu .nuget \ packages w moim profilu użytkownika, znaleźć pakiety i je usunąć. Dopiero wtedy program Visual Studio ściągnie pakiety na nowo i poprawnie doda je jako odwołania.

Aaron
źródło
1

Najlepsze obejście, jakie znalazłem, tworząc nowy projekt od podstaw, a następnie zaimportuj wszystkie pliki źródłowe z kodem. Mój projekt nie był tak skomplikowany, więc nie miałem z tym problemu.

Martin Deivid
źródło
1

Żadne z innych rozwiązań nie zadziałało w mojej sytuacji:

Zależności AspNetCore zostały zainstalowane / odinstalowane i były buforowane. „AspNetCore.All” odmówiłby prawidłowej aktualizacji / ponownej instalacji / usunięcia. I niezależnie od tego, co zrobiłem, użyłby buforowanych zależności (z którymi nie był kompatybilny), ponieważ były one wyższą wersją.

  1. Kopia zapasowa wszystkiego. Zwróć uwagę na listę zależności, które będziesz musiał ponownie zainstalować, Zamknij VisualStudio
  2. Otwórz wszystkie pliki .proj w edytorze tekstu i usuń wszystkie PackageReference
  3. W każdym projekcie usuń bin,obj foldery
  4. Usuń wszystkie foldery „pakietów” znalezione w rozwiązaniu.
  5. Otwórz rozwiązanie, wejdź do Tools > Nuget Package Manager > Package Manager SettingsiClear all Nuget caches . Sprawdź konsolę, ponieważ usunięcie niektórych elementów może się nie powieść - skopiuj ścieżkę folderu i zamknij program Visual Studio.
  6. Usuń wszystko z tego folderu Otwórz ponownie rozwiązanie i ponownie rozpocznij instalowanie pakietów NuGet od podstaw.

Jeśli to nadal nie działa, powtórz, ale także przeszukaj dysk w Eksploratorze Windows w poszukiwaniu nugeti usuń wszystko, co wygląda w pamięci podręcznej.

jv_
źródło
0

vs2015 nie włącza problemu przywracania NuGet. Moje rozwiązanie:

  1. dodaj folder .nuget, dodaj plik NuGet.Config i NuGet.targets w Directory .nuget

  2. każdy plik projektu add: build

  <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>
方 权 军
źródło
To jest stary sposób robienia tego. Zobacz odpowiedź @davenewza i jego link do blog.davidebbo.com/2014/01/…
timB33
0

Jeśli błąd, z którym się spotykasz, to „nie można połączyć się ze zdalnym serwerem”, tak jak był to mój, skorzystasz również z tego sprawdzenia oprócz sprawdzeń opisanych w powyższych komentarzach.

Widziałem, że istnieją 2 źródła pakietów NUGET, z których można pobrać pakiety (w menu Narzędzia-> Menedżer pakietów Nuget-> Ustawienia Menedżera pakietów). Jedno ze źródeł pakietu nie działało i Nuget próbował pobrać tylko z tego źródła.

Wszystko zaczęło się układać, gdy zmieniłem źródło pakietu do pobrania z: https://www.nuget.org/api/v2/ WYJĄTKOWO w ustawieniach

vamsee
źródło
0

W moim przypadku przerwana próba przywrócenia Nuget spowodowała uszkodzenie jednego z packages.configplików w rozwiązaniu. Nie odkryłem tego przed sprawdzeniem mojego drzewa roboczego git. Po cofnięciu zmian w pliku przywracanie Nuget znów działało.

Frederik Struck-Schøning
źródło
0

Istnieje skrót umożliwiający przywrócenie Nuget, 1. Upewnij się, że połączenie internetowe lub adresy URL Nuget są prawidłowe w menu opcji VS Tools 2. Spójrz na folder .nuget lub nuget w rozwiązaniu, w przeciwnym razie - skopiuj z dowolnego, aby uzyskać plik NuGet.exe

  1. USUŃ foldery pakietów, jeśli istnieją

  2. Otwórz konsolę Menedżera pakietów, wykonaj to polecenie

    • wklej pełną ścieżkę do pliku nuget.exe PRZYWRÓĆ pełną ścieżkę do pliku .sln!
  3. użyj polecenia Install-pacakge, jeśli kompilacja nie przeszła w poszukiwaniu brakujących odniesień. Mam nadzieję, że to pomoże (HIH)
HydTechie
źródło
0

W VS2017 kliknij prawym przyciskiem myszy rozwiązanie => Otwórz CommandLine => Developer Command Line.

Gdy to się otworzy, wpisz (i naciśnij Enter po)

dotnet restore

Spowoduje to przywrócenie wszystkich / wszystkich pakietów i otrzymasz niezły wynik konsoli z tym, co zostało zrobione ...

James Joyce
źródło