Usuń przywracanie pakietu NuGet z rozwiązania

148

Dodałem ostatnią funkcję przywracania pakietu NuGet do rozwiązania przy użyciu opcji „Włącz przywracanie pakietu NuGet”: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

Jednak zepsuło to mój serwer kompilacji i nie miałem czasu go naprawić, więc chciałem go usunąć. O ile wiem, nie ma takiej opcji, więc ręcznie usunąłem następujący wiersz ze wszystkich moich plików * .csproj:

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

Problem polega na tym, że za każdym razem, gdy moje pliki * .csproj są wyewidencjonowywane lub otwierają moje rozwiązanie, wiersz jest automatycznie dodawany ponownie, co powoduje uszkodzenie kompilacji, jeśli przypadkowo ją sprawdzę :(

Jakieś pomysły, jak mogę to trwale usunąć?

AKTUALIZACJA: pomimo odpowiedzi poniżej, wciąż powraca przy otwieraniu rozwiązania, czy ktoś ma ten sam problem?

Wiebe Tijsma
źródło
2
Czy nie możesz po prostu wycofać zestawu zmian w kontroli źródła?
Betty,
cóż, to był dość duży zestaw zmian, ale dzięki twojemu komentarzowi sprawdziłem i wygląda na to, że dodałem folder .nuget w ścieżce rozwiązania, usunąłem to również, aby zobaczyć, czy rozwiązuje problem
Wiebe Tijsma
Czy udało ci się naprawić serwer kompilacji? (i czy jest to teamcity?), ponieważ cytowana powyżej linia projektu importu powoduje niepowodzenie kompilacji mojego teamcity
Baldy
@Baldy Nie, używamy TFS Build i tak naprawdę nie szukałem rozwiązania, po prostu je usunąłem (nadal planuję
zagłębić się
3
Utworzyłem problem dla zespołu NuGet, aby rozwiązać ten problem. Proszę, zagłosuj w górę
deadlydog

Odpowiedzi:

214

Nie wyglądałem zbyt dobrze, do plików projektu dodano kolejną właściwość:

<RestorePackages>true</RestorePackages>

Wystarczy ręcznie usunąć to, a także wszystkie te wiersze ze wszystkich plików * .csproj:

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

AKTUALIZACJA:

Okazuje się, że jest to trwały mały błąd, jeśli ręcznie edytujesz pliki projektu, pamiętaj, aby zamknąć rozwiązanie i usunąć wszystkie linie z projektu naraz , w przeciwnym razie zostaną one dodane ponownie po ponownym załadowaniu projektu ...

UPDATE2:

Usuń również folder .nuget z katalogu głównego rozwiązania

UPDATE3:

Późniejsza wersja NuGet dodaje kolejną sekcję, którą należy usunąć:

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

Aktualizacja4

Wewnątrz folderu NuGet.Targetsznajdującego się w .nugetfolderze znajduje się kolejna sekcja, która jest dodawana do nowych projektów ... przełącz to na false.

<!-- We need to ensure packages are restored prior to assembly resolve -->
<BuildDependsOn Condition="$(RestorePackages) == 'false'">
    RestorePackages;
    $(BuildDependsOn);
</BuildDependsOn>
Wiebe Tijsma
źródło
7
Odkryłem, że <Import Project="$(SolutionDir)\.nuget\nuget.targets" />na końcu pliku .csproj znajduje się również plik .csproj, który należy ręcznie usunąć.
TimDog
6
HA! cofa się powoli :)
TimDog
5
To też mnie dręczy. Jeśli twoje projekty są w wielu różnych rozwiązaniach, funkcja przywracania pakietów powoduje mnóstwo problemów.
Damian,
7
„Upewnij się, że zamknąłeś rozwiązanie” ma tutaj kluczowe znaczenie, ponieważ VS2010 wydaje się buforować pliki csproj / msbuild (bez pobierania pewnych modyfikacji). Nie zauważyłem tego zachowania w VS2012, ale bardzo mnie to nękało podczas modyfikowania tych plików w VisualStudio.
Xavier Decoster,
4
Utworzyłem problem dla zespołu NuGet, aby rozwiązać ten problem. Proszę, zagłosuj w górę
deadlydog
48

Aby wyłączyć przywracanie pakietu Nuget:

  1. Usuń folder .nuget
  2. Usuń określone wiersze ze wszystkich plików .csproj

Linie do usunięcia:

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

Uwaga: upewnij się, że dokonałeś wszystkich zmian za jednym razem, zanim ponownie załadujesz rozwiązanie, w przeciwnym razie doda je z powrotem.

Jest to oparte na następującym artykule: http://bartwullems.blogspot.no/2012/08/disable-nuget-package-restore.html

Możesz również sprawdzić, czy ta opcja jest wyłączona: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

angularsen
źródło
Utworzyłem problem dla zespołu NuGet, aby rozwiązać ten problem. Głosuj w górę
głosuj
1
Dzięki, dla mnie to było po prostu wyłączenie tej opcji
Maarten Kieft
Użyłem narzędzia IFix z wielkim sukcesem w czyszczeniu repozytoriów w wielu projektach. Zasadniczo automatyzuje te kroki. visualstudiogallery.msdn.microsoft.com/…
angularsen
Folder .nuget jest ukryty i musisz go usunąć z katalogu nie tylko projektu.
Erik Bergstedt,
8

Czy to nie jest to ustawienie tutaj?

Opcje ... -> Menedżer pakietów Nuget -> [odznacz] Zezwalaj Nuget na pobieranie brakujących pakietów

wprowadź opis obrazu tutaj

Używam programu Visual Studio Professional + Resharper 8.2

orad
źródło
Usunąłem folder pakietów i wyczyściłem pamięć podręczną pakietów, aby naprawić mój problem. Dzięki!
Tresto
1
Nie, nie aktualizuje plików .proj później - więc problem powraca - ale dobrze to zrobić tutaj :-)
schmoopy
Okno danych wyjściowych pokazuje to podczas budowania: Restoring NuGet packages... To prevent NuGet from restoring packages during build, open the Visual Studio Options dialog, click on the Package Manager node and uncheck 'Allow NuGet to download missing packages during build.'jest to tylko potwierdzenie, że tak powinno być.
Muzułmanin Ben Dhaou
1
Nie ma to związku z przywracaniem pakietu Nuget. Starsze wersje VS miały element menu kontekstowego dla projektów zatytułowany „Włącz przywracanie pakietu Nuget”, który tworzył.nuget/ folder i modyfikował go tak, .csprojaby odnosił się do .targetspliku. Miałeś oddać nuget.exeto swojemu VCS (eww, rozwiązywanie problemu nuget rozwiązuje!) I taką brzydotę. Obecnie msbuild /restoreistnieje i wbudowane przywracanie pakietów VS. OP pyta, jak usunąć stary, zły sposób robienia rzeczy - a nie jak wyłączyć poprawną wbudowaną obsługę przywracania pakietów w VS.
binki
5

Rozwiązania korzystające obecnie z przywracania pakietów zintegrowanych z programem MSBuild można migrować do funkcji automatycznego przywracania pakietów. Z tego, co rozumiem, powinno to pomóc tym, którzy napotykają problemy z kompilacją CI. (Proszę mnie poprawić, jeśli się mylę).

Zapoznaj się z dokumentem w witrynie internetowej NuGet: Migrowanie rozwiązań zintegrowanych z MSBuild w celu użycia funkcji automatycznego przywracania pakietów pod adresem http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

Znajdują się tam informacje dotyczące konwersji z TFS i bez niego.

David Ebbo opublikował również informacje na http://blog.davidebbo.com/2014/01/the-right-way-to-restore-nuget-packages.html

James Bradt
źródło
3

NuGet zawiera wpis w blogu dotyczący migracji do automatycznego przywracania pakietów: http://docs.nuget.org/docs/workflows/migrating-to-automatic-package-restore

W poście na blogu znajduje się odwołanie do skryptu PowerShell , który zajmie się automatycznym (i rekurencyjnym) usunięciem niezbędnych wierszy : https://github.com/owen2/AutomaticPackageRestoreMigrationScript/blob/master/migrateToAutomaticPackageRestore.ps1

Oferowanie opcji Wyłącz przywracanie pakietu NuGet bezpośrednio jest oznaczane jako nie zostanie naprawione: https://nuget.codeplex.com/workitem/1883

Nitin Agarwal
źródło
2

Zastosowałem przyjęte rozwiązanie bezskutecznie, korzystając z 2012 r. To jednak zadziałało,

  1. Całkowicie zamknij VS
  2. Zaktualizuj <RestorePackages>true</RestorePackages>do <RestorePackages>false</RestorePackages>i usuń <Import Project="$(SolutionDir)\.nuget\nuget.targets" />linię
  3. Zmieniono również nazwę nuget.exenanuget.exe.NotExe
Daryl
źródło
2

Dla każdego, kto nadal potrzebuje oczyścić projekt przy użyciu przywracania pakietu NuGet w starym stylu, dostępne tutaj narzędzie IFix automatyzuje ten proces.

Po prostu uruchom instalator ( IFixzostanie dodany do PATH), a następnie uruchom:

IFix nugetrestore --fix

Możesz najpierw uruchomić go w trybie sprawdzania, aby zobaczyć, co wyczyści:

IFix nugetrestore --check
Simon Fox
źródło
1

Miałem ten sam problem. Co ostatecznie zrobiłem: 1) wejdź do każdego pliku .csproj projektu w rozwiązaniu, otwórz go w notatniku, a następnie usunąłem część pliku xml i zapisałem.

2) Następnie usunąłem wszystkie pliki package.config w całym rozwiązaniu.

3) Następnie musiałem usunąć .nuget i foldery pakietów.

W tym momencie miałem całkowicie darmowe rozwiązanie NuGet.

4) Następnie ręcznie odwołałem się do potrzebnych bibliotek DLL i uruchomiłem kompilację, a rozwiązanie działało jak mistrz bez potrzebnych pakietów NuGet.

Andy30acre
źródło
1

Przejdź do katalogu rozwiązania, w którym znajduje się [$(SolutionDir)\.nuget\nuget.targets] .nugetfolder i nuget.targetsplik, usuń folder i po raz ostatni zmień usuń linie z csproj .

Problem nie wróci, aby Cię ponownie wkurzyć.

arvind
źródło
1

Usuń plik packages.config w swoim rozwiązaniu.

Czas oczekiwania
źródło
0

Przypadkowo włączyłem tę opcję "przywracania pakietu" podczas otwierania mojego projektu w VS2012 RC i zacząłem otrzymywać błędy, które wyglądały mniej więcej tak:

„Błąd 1 Nie można zlokalizować„ C: \ FolderX \ SomeProject.nuget \ nuget.exe ””

Aby naprawić błąd, postępowałem zgodnie z powyższymi instrukcjami, otworzyłem każdy plik projektu w notatniku i usunąłem tę linię RestorePackage.

Dmitry Lyalin
źródło
0

Udało mi się rozwiązać ten problem, wykonując następujące czynności:

1) upewnij się, że wykonałeś kopię zapasową wszystkich aktualnie wyewidencjonowanych zmian plików.

2) Fizycznie usuń folder rozwiązania ze swojego C: \ (ścieżka zamapowana na TFS).

3) pobierz najnowsze informacje z programu TFS dla swojego rozwiązania.

4) skopiuj (jeśli istnieją) zmiany z kopii zapasowej wykonanej w kroku 1.

mam nadzieję, że to pomoże!

Rajesh
źródło
-2

Natknąłem się na ten sam problem i próbowałem usunąć wszystkie tagi .nuget i RestorePackage z plików projektu, ale jeden projekt po prostu nie ładował się ponownie, bez względu na to, jak dokładnie go zbadałem pod kątem tagów .nuget i RestorePackages. Myślę, że gdzieś są jakieś ukryte odniesienia do tego.

Ostatecznie łatwiej było po prostu skopiować pliki i stworzyć nowy projekt i zaimportować go do rozwiązania.

Piotr
źródło
-8

Nuget jest do bani. Po prostu usuń nugets i usuń lub skomentuj elementy pakietu z packages.config w katalogu głównym projektów, w których jest to problem. Zamiast tego użyj bezpośrednich odwołań do jakiegoś folderu lib.

<?xml version="1.0" encoding="utf-8"?>
  <packages>
    <!--<package id="EntityFramework" version="6.0.2" targetFramework="net45" />-->
  </packages>
Igor N
źródło
Jak każdy inny produkt „jest do bani”, jeśli nie wiesz, jak go używać i nie starasz się go zrozumieć.
Wiebe Tijsma
To prawda, ale moim zdaniem „szturchnięcie” nie daje wystarczającej kontroli nad projektem. Również GUI Nuget wymaga poważnych ulepszeń. 1. Nie jest intuicyjny, 2. Trudno jest zarządzać pakietem 3. Trudno jest wyłączyć przywracanie 4. Pobiera niepotrzebne pakiety 5. Czasami nie jest w stanie przywrócić pakietów
Igor N
W pewnym stopniu się zgadzam, chociaż myślę, że to naprawdę lepsze niż brak menedżera pakietów. Wygląda na to, że pracują nad poważnymi aktualizacjami GUI dla nuget
Wiebe Tijsma