2012-01-25 19 views
127

Sprawdziłem projekt na jednym komputerze, sprawdziłem na innym i stwierdziłem, że brakuje binariów zainstalowanych przez NuGet. Mogłem je sprawdzić w celu kontroli źródła, jak również, ale wygląda na to, że jest to lepsze rozwiązanie:Przywracanie pakietów NuGet nie działa

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

I przestrzegać tych wskazówek, teraz mają folder .nuget gdzie trzeba być, mają następujące wpisy w moim Plik .csproj:

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

, a jednak po przebudowaniu mojego rozwiązania brakujące pakiety nie zostaną przywrócone.

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

+0

Czy w dzienniku wyjściowym pojawia się plik nuget.exe? – Pranav

+0

Co ważne: czy widzisz jakieś błędy w dzienniku wyjściowym? – maartenba

Odpowiedz

210

Uwaga można wymusić pakiet przywrócić wykonać uruchamiając następujące polecenia w konsoli menedżera pakietów Nuget

Update Package Ponownie instaluje

Siły ponownej instalacji wszystko w roztworze.


Update Package Ponownie instaluje -ProjectName myProj

Siły ponowne instalowanie wszystkiego w projekcie myProj.

Uwaga: To jest opcja jądrowa. Podczas korzystania z tego polecenia możesz nie uzyskać tych samych wersji zainstalowanych pakietów, które mogą prowadzić do problemów. Jest to mniej prawdopodobne na poziomie projektu, w przeciwieństwie do poziomu rozwiązania.

Możesz użyć opcji parametru linii poleceń -safe, aby ograniczyć aktualizacje do nowszych wersji z tym samym komponentem wersji Major i Minor. Ta opcja została dodana później i rozwiązuje niektóre problemy wymienione w komentarzach.

Update Package Ponownie instaluje -Safe

+0

Należy pamiętać, że ponowne zainstalowanie rozwiązania może zająć dużo czasu, trzeba będzie odpowiedzieć na pytania dotyczące wymiany plików i wystąpił błąd/konflikt z kontrolą kodu źródłowego Git. –

+0

Niezbyt dobre rozwiązanie - to zepsuło mój projekt, aby już nie działało. – NightOwl888

+5

@ NightOwl888, który brzmi jak coś, co musi zgłosić się do nuget, ponieważ nie powinno być żadnego sposobu, aby to zrobić, chyba że faktycznie zawsze miałeś problemy wiążące piekło DLL i przez szczęście to działało, ale ponowne zainstalowanie go zakończyło twój los szczęścia. –

19

Czy włączono tryb przywracania pakietów w projekcie, który zawiera brakujące pakiety/pliki binarne? Jest to znany problem, który wymaga pakietów być poprawnie zainstalowana po włączeniu trybu przywracania:

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

+3

Dzięki za link. Włącz tryb przywracania pakietu w projekcie, w którym brakujące pakiety/pliki binarne będą częstym przypadkiem. Jeśli nie masz pakietów, to kiedy chcesz je zdobyć. Niepowodzenie przypadku użycia. – Anthony

+2

Kiedy mówisz "włącz tryb przywracania pakietu w projekcie, który ma brakujące pakiety", co masz na myśli? Czy istnieje polecenie konsoli, które muszę uruchomić, aby to zrobić? – CodeWarrior

+71

NuGet zawodzi mnie codziennie, pogardzam nim całkowicie. – Jammer

11

Mam biegać w ten problem w dwóch scenariuszach.

Po pierwsze, podczas próby zbudowania rozwiązania z wiersza poleceń przy użyciu msbuild.exe. Po drugie, kiedy próbuję zbudować sln i zawierające projekty na moim serwerze kompilacji za pomocą TFS i CI.

Dostaję błędy, twierdząc, że brakuje referencji. Podczas sprawdzania zarówno mojego lokalnego katalogu budowania, jak i serwera TFS widzę, że folder/packages nie został utworzony, a pakiety nugetów nie są kopiowane. Postępowanie zgodnie z instrukcjami wymienionymi w odpowiedzi Alexandre http://nuget.codeplex.com/workitem/1879 również nie zadziałało.

Mam włączone pakiety przywracania za pośrednictwem VS2010 i widziałem tylko kompilacje działa tylko z poziomu VS2010. Ponownie, użycie msbuild nie powiodło się. Moje obejście jest prawdopodobnie całkowicie nieważne, ale dla mojego środowiska to wszystko działało z linii poleceń zbudowanej lokalnie, a także z budowania CI w TFS.

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

od:

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

do: (wypowiedzenia, bez cudzysłowów wokół zmiennych)

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

rozumiem, że jeśli moje katalogi mają spacje w nich, to się nie powiedzie, ale nie mam miejsca w swoich katalogach i tak to obejście dostałem buduje się zakończyć powodzeniem ... dla ti ja jestem.

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

+0

Miałem problem z podwójnymi cytatami i musiałem wykonać tę samą edycję, co Ty. Bardzo frustrujące! – Greg

3

tylko dla innych, które mogłyby napotkasz ten problem, udało mi się rozwiązać ten problem poprzez zamknięcie Visual Studio i ponownym otwarciu projektu. Po załadowaniu projektu pakiety zostały przywrócone podczas fazy inicjowania.

21

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

NuGet 2.7+ przedstawił nas do Automatyczne przywracanie pakietów. Jest to uważane za znacznie lepsze podejście w przypadku większości aplikacji, ponieważ nie narusza procesu MSBuild. Mniejsze bóle głowy.

Niektóre linki możesz zacząć:

+2

Dziękujemy za odpowiedź odpowiednią do aktualnej wersji NuGet. –

1

Czasem coś dziwnego się dzieje i za pomocą Visual Studio do automatycznego przywracania nie działa. W takim przypadku możesz skorzystać z NuGet Package Manager Console. To jest otwarte w Visual Studio od Narzędzia -> Menedżer pakietów NuGet -> Konsola menedżera pakietów. Polecenia w konsoli są proste. Aby uzyskać pomoc kontekstową podczas wpisywania polecenia, wystarczy nacisnąć przycisk, a otrzymasz wszystkie opcje zaczynające się od liter, które piszesz.Więc jeśli pakiet nie jest zainstalowany, na przykład log4net wpisz następujące polecenie:

Install-Package log4net

można zrobić dużo więcej, jak określić wersję do zainstalowania aktualizacji pakietu, odinstaluj paczka, itp.

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

15

Musisz wybrać jeden sposób następujący:

Ponowne zainstalowanie pakietu o jego nazwę w projektach wszystkich Solution:

Update-Package –reinstall <packageName> 

Ponowne zainstalowanie pakietu przez jego nazwę i ignorując to Zależności w projektach wszystkich Solution:

Update-Package –reinstall <packageName> -ignoreDependencies 

Ponowne zainstalowanie pakietu o jego nazwę w projekcie:

Update-Package –reinstall <packageName> <projectName> 

Ponowne zainstalowanie wszystkich pakietów w konkretnym projekcie:

Update-Package -reinstall -ProjectName <projectName> 

Ponowne zainstalowanie wszystkich pakietów w roztworze:

Update-Package -reinstall 
+0

Rozwiązałem mój problem, szybko i brudno. – blackorchid

1

Automatyczna Pakiet Restore nie dla każdego z następujących powodów :

  1. Nie zrobiłeś r emuluj pliki NuGet.exe i NuGet.targets z folderu .nuget rozwiązania (które można znaleźć w folderze głównym rozwiązania).
  2. Nie włączono automatycznego przywracania pakietów za pomocą Narzędzia >> Opcje >> Menedżer pakietów Nuget >> Ustawienia główne.
  3. Zapomniałeś ręcznie usunąć referencje we wszystkich swoich projektach do Nuget.targets złożyć
  4. być konieczne ponowne uruchomienie programu Visual Studio (upewnij się, że proces zostanie zabity z menedżera zadań przed ponownym uruchomieniem).

Poniższy artykuł przedstawia bardziej szczegółowo, jak go o punktach 1-3: https://docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore

+1

Odnośnie twojej # 1 punkt, link podać zaprzecza twojej rady: „Jeśli używasz TFS 1. Usuń pliki NuGet.exe i NuGet.targets z folderu .nuget Rozwiązaniem jest 2. zachowują Nuget. Plik konfiguracyjny, aby kontynuować ominięcie dodawania pakietów do kontroli źródła. " –

+0

Masz rację. Zaktualizowałem swoją odpowiedź. –

0

vs2015 nie pozwalają Nuget przywrócić problem. Moje rozwiązanie:

  1. Add Folder .nuget, dodać plik NuGet.Config i NuGet.targets w katalogu .nuget

  2. każdy add plik projektu: 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> 
+0

To jest stary sposób robienia tego. Zobacz odpowiedź @davenewza i jego link do http://blog.davidebbo.com/2014/01/the-right-way-to-restore-nuget-packages.html – timB33

0

Jeśli błąd, z którym się spotkasz, "nie może połączyć się ze zdalnym serwerem", tak jak był mój, to przyniosłoby to korzyści ty również mieć tę kontrolę oprócz kontroli przewidzianych w powyższych uwagach.

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

miejsca spadł na miejsce raz zmieniłem źródła pakietów do pobrania z: https://www.nuget.org/api/v2/ explictly w ustawieniach

1

miałem pakiety Nuget łamanie po Zrobiłem Przywracanie systemu w systemie, wzbogacić ją około dwóch dni . (Pakiety NuGet zostały zainstalowane w międzyczasie.) Aby to naprawić, musiałem przejść do folderu .nuget \ packages w moim profilu użytkownika, znaleźć pakiety i je usunąć. Tylko wtedy program Visual Studio odświeży pakiety i doda je jako referencje.

0

W moim przypadku, przerwana próba przywracania Nugeta spowodowała uszkodzenie jednego z plików packages.config w rozwiązaniu. Nie odkryłem tego przed sprawdzeniem mojego drzewa roboczego git. Po przywróceniu zmian w pliku, przywracanie Nuget działało ponownie.

0

Jest to skrót, aby Nuget przywrócić pracę 1. Upewnij internet lub Nuget adresy URL są prawidłowe w VS menu Tools opcji 2. Spójrz na .nuget lub Nuget folderu w roztworze, w przeciwnym wypadku - kopiowanie z dowolnego dostać nuget.exe

  1. usuwanie pakietów foldery, jeśli istnieje

  2. Otwórz konsolę zarządca pakietu wykonać to polecenie

    • wklej pełną ścieżkę nuget.exe PRZYWRÓĆ pełną ścieżkę pliku .sln!
  3. użyj komendy Install-pacakge, jeśli kompilacja nie dotarła do żadnych brakujących odniesień. nadzieję, że pomoże (HIH)
1

Najlepszym Rozwiązaniem, które znalazłem tworzenia nowego projektu od podstaw, następnie zaimportować wszystkie pliki źródłowe z kodem. Mój projekt nie był tak skomplikowany, więc nie miałem z tym problemu.

6

VS 2017

Narzędzia> Menedżer Nuget pakiet> Ustawienia menedżera pakietów> Ogólne Kliknij "Clear All Nuget Cache (s)"

+0

Dziękuję, pracowałeś jak czar. – reika

0

Jeżeli nic innego nie działa, 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 go wypróbować.

0

Jeśli żadna z pozostałych odpowiedzi pracować dla ciebie należy spróbować następujących która była jedyną rzeczą, która pracowała dla mnie:

znaleźć plik .csproj i edytować go w edytorze tekstu.

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

ponownie zainstalować wszystkie pakiety w roztworze:

Update-Package -reinstall 

Po tym Twoje pakiety Nuget powinny zostać przywrócone, myślę, że może to być przypadek frędzle, że występuje tylko wtedy, gdy przenieść projekt do innej lokalizacji.

Powiązane problemy