Mam rozwiązanie z wieloma projektami. Brakuje większości odniesień stron trzecich, ale istnieją packages.config
pliki dla każdego projektu. Jak zmusić NuGet do zainstalowania / aktualizacji wszystkich potrzebnych pakietów? Czy należy to zrobić za pomocą wiersza polecenia dla każdego projektu?
674
Odpowiedzi:
Możesz użyć nuget.exe do przywrócenia pakietów lub z zainstalowanym NuGet 2.7 lub nowszym, możesz po prostu skompilować swoje rozwiązanie w Visual Studio, które również przywróci brakujące pakiety.
W przypadku NuGet.exe możesz uruchomić następujące polecenie dla każdego projektu.
Lub za pomocą NuGet 2.7 można przywrócić wszystkie pakiety w rozwiązaniu za pomocą wiersza polecenia.
Oba z nich ściągną paczki. Pliki projektu nie zostaną zmodyfikowane podczas uruchamiania tego polecenia, więc projekt powinien już zawierać odwołanie do pakietów NuGet. Jeśli tak nie jest, możesz użyć programu Visual Studio do zainstalowania pakietów.
W NuGet 2.7 i nowszych Visual Studio automatycznie przywróci brakujące pakiety NuGet podczas budowania rozwiązania, więc nie ma potrzeby korzystania z NuGet.exe.
Aby zaktualizować wszystkie pakiety w swoim rozwiązaniu, najpierw je przywróć, a następnie możesz użyć NuGet.exe do aktualizacji pakietów lub w Visual Studio możesz zaktualizować pakiety z okna konsoli Menedżera pakietów, lub w końcu możesz użyć Zarządzaj Okno dialogowe Pakiety.
Z wiersza poleceń możesz aktualizować pakiety w rozwiązaniu do najnowszej wersji dostępnej na stronie nuget.org.
Zauważ, że to nie uruchomi żadnych skryptów PowerShell w żadnym pakiecie NuGet.
W programie Visual Studio można także użyć konsoli Menedżera pakietów, aby zaktualizować pakiety. Ma to tę zaletę, że wszystkie skrypty PowerShell będą uruchamiane w ramach aktualizacji, w przypadku gdy nie będą uruchamiane przy użyciu NuGet.exe. Następujące polecenie zaktualizuje wszystkie pakiety w każdym projekcie do najnowszej wersji dostępnej na stronie nuget.org.
Możesz również ograniczyć to do jednego projektu.
Jeśli chcesz ponownie zainstalować pakiety w tych samych wersjach, które były wcześniej zainstalowane, możesz użyć
-reinstall
argumentu zUpdate-Package
poleceniem.Możesz również ograniczyć to do jednego projektu.
-reinstall
Opcja będzie najpierw odinstalować, a następnie ponownie zainstalować pakiet do projektu.Lub możesz zaktualizować pakiety za pomocą
Manage Packages
okna dialogowego.Aktualizacje:
-reinstall
źródło
Update-Package -reinstall -Project ProjectName
Ponownie zainstaluj wszystkie pakiety we WSZYSTKICH PROJEKTACH bieżącego rozwiązania:
Ponownie zainstaluj wszystkie pakiety w SPECYFICZNYM PROJEKCIE aktualnego rozwiązania ( Dzięki jednoznaczności i ashes999 ):
źródło
Istnieje inny, nowszy i szybszy sposób na to z poziomu Visual Studio. Sprawdź ten post David Ebbo i zapoznaj się z sekcją komentarzy, jeśli napotkasz problemy. Zasadniczo wykonujesz następujące czynności w oknie Menedżera pakietów:
Następnie, gdy zbudujesz swoje rozwiązanie, pakiety zostaną automatycznie zainstalowane, jeśli ich brakuje.
Aktualizacja:
Ta funkcja jest wbudowana w Nuget 1.6 z integracją Visual Studio, więc nie trzeba nawet instalować NuGetPowerTools ani wpisywać poleceń. Wszystko co musisz zrobić to
Przeczytaj ten artykuł, aby uzyskać więcej informacji.
źródło
Oto inne rozwiązanie, jeśli korzystasz z projektów witryny lub nie chcesz włączyć przywracania pakietu NuGet.
Za pomocą konsoli menedżera pakietów można wyliczyć wszystkie pakiety w pliku package.config i ponownie je zainstalować.
źródło
$packages.packages.package | % { Update-Package -reinstall -id $($_.id) }
Update-Package -Reinstall
.To najlepszy i najłatwiejszy przykład, jaki znalazłem. Ponownie zainstaluje wszystkie modele użytkowe wymienione w pakietach.config i zachowa bieżące wersje. Zamień
YourProjectNameGoesHere
na nazwę projektu.źródło
W najnowszej wersji NuGet 2.5 jest teraz przycisk „Aktualizuj wszystko” w menedżerze pakietów: http://docs.nuget.org/docs/release-notes/nuget-2.5#Update_All_button_to_allow_updating_all_packages_at_once
źródło
Używam Visual Studio 2015 i powyższe rozwiązania nie działały dla mnie, więc wykonałem następujące czynności:
Usuń folder pakietów z mojego rozwiązania, a także foldery bin i obj z każdego projektu w rozwiązaniu i daj mu przebudowę.
Może pojawi się następny błąd:
Aby rozwiązać ten problem: Zmień tę linię w pliku NuGet.targets i ustaw ją na wartość true:
Odniesienie: https://stackoverflow.com/a/30918648 i https://stackoverflow.com/a/20502049
źródło
Jeśli instalujesz Nuget 2.8, zaznacz pole wyboru
w Visual Studio. Jeśli jest zaznaczone, po prostu przebuduj projekt przywróci wszystkie biblioteki referencyjne.
źródło
Allow NuGet to download missing packages
wyboru.Po 3 godzinach poszukiwań i dochodzenia.
Miałem z tym problemy, ponieważ mamy dwóch członków w zespole (korzystających z kontroli źródła GitHub), ponieważ nie ograniczyliśmy plików pakietów do wysłania do zdalnego repozytorium, jeden z członków zespołu wysłał paczki na serwer i wyciągnąłem zmiany do mój lokalny.
Po tym miałem problem z PO, nie mogłem też opublikować mojego projektu API na serwerze.
W i właśnie użyłem
Pakiet aktualizacji - ponowna instalacja - uruchom to polecenie w konsoli Menedżera pakietów
To polecenie spowoduje ponowną instalację wszystkich pakietów używanych w rozwiązaniu. (Dla każdego projektu)
Ponownie zainstaluj wszystkie pakiety we WSZYSTKICH PROJEKTACH bieżącego rozwiązania:
Update-Package -ProjectName 'NameOfProject' -Reinstall - uruchom to polecenie w konsoli Menedżera pakietów
To polecenie spowoduje ponowną instalację wszystkich pakietów związanych z projektem określonym po „-ProjectName”. I myślę, że tak jest lepiej, ponieważ czekałem pół godziny, aby ponownie zainstalować wszystkie pakiety w rozwiązaniu.
Za tak wiele podziękowań dla Rodolpho Brocka .
Polecam również, aby podczas pobierania zmian ze zdalnego serwera nacisnąć przycisk „Przywróć pakiety”, który wyświetli Visual Studio.
źródło
Uważam, że pierwszą rzeczą, którą musisz zrobić, to włączyć funkcję przywracania pakietów . Zobacz także tutaj . Odbywa się to na poziomie rozwiązania (nie projektu).
Ale to nie doprowadzi cię do końca - napotkałem podobny problem po włączeniu funkcji przywracania. (VS2013, NuGet 2.8.)
Okazało się, że (nieumyślnie) przekazałem pakiety do kontroli źródła, kiedy zleciłem projekt - ale Visual Studio (i wtyczka kontroli źródła) zignorowały pliki binarne podczas przeprowadzania odprawy.
Problem pojawił się, gdy utworzyłem gałąź wydania. Moja lokalna kopia gałęzi dev / main / trunk miała pliki binarne, ponieważ właśnie tam pierwotnie zainstalowałem / pobrałem pakiety.
Jednak w nowej gałęzi wydania
.nupkg
pliki pakietów już tam były - więc NuGet nie sądził, że można coś przywrócić;Usunąłem wszystkie foldery pakietów w
$(SolutionDir)/packages
(w gałęzi wydania), a następnie przeprowadziłem pełną przebudowę i tym razem kompilacja się powiodła.... a potem oczywiście wróciłem i usunąłem foldery pakietów z kontroli źródła (w gałęzi trunk i release). Nie jestem jeszcze (jeszcze) pewien, czy
repositories.config
plik również powinien zostać usunięty.Wiele komponentów zainstalowanych dla ciebie przez szablony projektów - przynajmniej dla projektów internetowych - to pakiety NuGet. Oznacza to, że ten problem nie jest ograniczony do dodanych pakietów.
Dlatego włącz przywracanie pakietu natychmiast po utworzeniu projektu / rozwiązania, a przed wykonaniem wstępnej odprawy wyczyść
packages
folder (i upewnij się, że przekazujesz.nuget
folder do kontroli źródła).Zastrzeżenie: Widziałem inną odpowiedź tutaj na SO, która wskazywała, że wyczyszczenie
packages
folderu było częścią rozdzielczości. To postawiło mnie na dobrej drodze, więc chciałbym podziękować autorowi, ale nie mogę już znaleźć tego pytania / odpowiedzi. Wyślę edycję, jeśli się na nią natknę.Chciałbym również zauważyć, że
Update-Package -reinstall
zmodyfikuje pliki.sln
i.csproj
/.vbproj
. Przynajmniej tak zrobiłem w moim przypadku. Który IMHO sprawia, że ta opcja jest znacznie mniej atrakcyjna.źródło
Próbowałem,
Update-Package -reinstall
ale nie udało się na pakiecie i przestałem przetwarzać wszystkie pozostałe pakiety projektów w moim rozwiązaniu.Skończyłem ze swoim skryptem, który wylicza wszystkie pliki package.config i uruchamiam
Update-Package -Reinstall -ProjectName prj -Id pkg
dla każdego projektu / pakietu.Mam nadzieję, że może się przydać komuś:
Edycja: Wystąpił błąd: Update-Package: Nie można znaleźć pakietu „EntityFramework.BulkInsert-ef6”. Istniejące pakiety należy przywrócić przed wykonaniem instalacji lub aktualizacji. Ręczne uruchamianie
Update-Package -Reinstall -ProjectName my_prj -Id EntityFramework.BulkInsert-ef6
działało bardzo dobrze.źródło
Dla osób przybywających tutaj z powodu błędu serwera kompilacji możesz utworzyć cel MSBuild, uruchamiając polecenie exec, aby uruchomić polecenie przywracania nuget, jak poniżej (w tym przypadku nuget.exe znajduje się w folderze .nuget, a nie na ścieżka), które można uruchomić w kroku kompilacji TeamCity bezpośrednio przed budowaniem rozwiązania
źródło
teraz konsola Nuget Package Manager w programie Visual Studio 2012 automatycznie wyświetla przycisk „Przywróć”, gdy tylko znajdzie pakiet, który nie został zainstalowany, ale znajduje się w pliku package.config. Niesamowita funkcja!
źródło
W wersji VS2012 V11, jeśli użyję „-Reinstall” na końcu linii, to nie działa.
Więc po prostu użyłem:
źródło
Wiem, że to stary post, ale pomyślałem, że to może się przydać. Jeśli musisz zignorować określone pakiety podczas procesu aktualizacji (jak wszystkie pakiety, które aktualizują odwołania JavaScript), użyj następującego skryptu PowerShell (upewnij się, że źródło pakietu jest ustawione na „Wszystkie” w konsoli Menedżera pakietów):
EDYCJA 2014-09-25 10:55 EST - Naprawiono błąd w skrypcie
źródło
Nie wiem od kiedy, ale w VS2019 możesz to zrobić w łatwiejszy sposób:
źródło
W Visual Studio 2017 - Podczas kompilacji za pomocą IDE - pobierze wszystkie brakujące pakiety nuget i zapisze w folderze „paczki”.
Ale kompilacja maszyny kompilacji została wykonana przy użyciu msbuild.exe. W takim przypadku pobrałem nuget.exe.
Podczas każdego procesu kompilacji przed uruchomieniem msbuild.exe. Wykona się -> nuget.exe przywróci plik NAME_OF_SLN_File (jeśli jest tylko jeden plik .SLN, możesz zignorować ten parametr).
źródło
MSbuild -t:restore Xxxx.sln