Czy istnieje sposób automatycznego aktualizowania NuGet.exe w folderze NuGet podczas korzystania z przywracania pakietów?

92

Mój zespół używa opcji Włącz przywracanie pakietu od wersji Nuget 1.5, aby utrzymać pakiety poza naszą kontrolą źródła. Kiedy wydano Nuget 1.6, zauważyliśmy problem polegający na tym, że nie ściągał pakietów, i wyśledziliśmy go do pliku Nuget.exe w folderze .nuget, który wymagał aktualizacji do wersji 1.6, aby dopasować się do Menedżera pakietów.

Jaki jest najlepszy sposób aktualizacji rozwiązania po zaktualizowaniu Nuget? Nie widzę łatwego sposobu ze studia, aby stwierdzić, która wersja nuget znajduje się w folderze rozwiązania. Jak dotąd usuwamy folder .nuget i ponownie uruchamiamy polecenie Włącz przywracanie pakietu.

Stóg
źródło

Odpowiedzi:

148

Sugerowałbym aktualizację .nuget \ nuget.exe za pomocą tego polecenia z wiersza poleceń:

nuget.exe update -self

[EDYTUJ]: Najpierw zamknij VS Solution. Jeśli istnieje aktualizacja i rozwiązanie zostanie otwarte, plik NuGet. Exe zostanie usunięty z rozwiązania.

Państwo mogli automatycznie aktualizować nuget.exe na przywrócenie modyfikując .nuget \ nuget.targets dodanie powyższego polecenia. Spojrzałbym na polecenie przywracania jako przykład. Ale nie jestem pewien, czy warto, aktualizacje nuget.exe nie są tak powszechne, a zgodność z poprzednimi wersjami powinna bardzo rzadko przerywać.

Alexandre Dion
źródło
Wypróbowałem to w jednym z moich projektów. Zaktualizował NuGet.exe, ale wydawało się, że usunął go z mojego rozwiązania. Wiem, że mogę to dodać, ale to wydawało się dziwne.
Rick
Ach tak, tym razem próbowałem prawdziwej aktualizacji i nuget.exe został również usunięty z rozwiązania VS. (Nie otrzymałem tego wcześniej, ponieważ nuget.exe był aktualny). Dzieje się tak, ponieważ podczas aktualizacji bieżący plik nuget.exe jest najpierw przenoszony do pliku nuget.exe.old, więc odwołanie do pliku jest uszkodzone. Wątpię, że zostanie to naprawione, uruchomiłbym polecenie z zamkniętym rozwiązaniem.
Alexandre Dion,
Wygląda na to, że wykonanie samoaktualizacji nie dałoby nowego pliku NuGet.targets, co może być problemem. Myślę, że zespół NuGet wprowadził pewne zmiany w pliku docelowym między wersjami 1,6 i 1,7.
William Gross
@William Gross no cóż, możesz sprawdzić, czy była aktualizacja nuget.org/packages/NuGet.Build (to jest pakiet zawierający nuget.targets)
Alexandre Dion
pracował dla mnie, pamiętaj tylko, aby uruchomić cmd jako administrator
Mohammad
31

Najlepszym sposobem na rozwiązanie tego problemu jest po prostu usunięcie folderu .nuget i ponowne włączenie funkcji przywracania całego pakietu. Jak wspomniano powyżej, możesz dodać polecenie samoaktualizacji do kompilacji, ale nie zaktualizuje to elementów docelowych ani plików konfiguracyjnych, jeśli wystąpią zmiany między wersjami (lub usuniesz odwołanie z rozwiązania). Być może to nie jest taka wielka sprawa, ale jest to pewny sposób, aby upewnić się, że masz najnowsze pliki exe i konfiguracyjne. Ostatecznie aktualizacja jest problemem tylko wtedy, gdy potrzebujesz dostępu do nowego polecenia lub w końcu nastąpi poważna zmiana w nowej wersji.

Chris Kirby
źródło
3
+1 - Przekonałem się, że jest to najlepszy sposób, aby uzyskać aktualizacje NuGet.exe , jak również w NuGet.targetspliku (który jest również ważne). Po prostu upewnij się, że zapisałeś wszelkie dostosowania, które wprowadziłeś w NuGet.targetspliku (np. Niestandardowe źródła PackageSources), aby móc ponownie zastosować je do nowego pliku.
Jesse Webb
świetnie, że działało na mnie jak urok! dzięki za informację
Gayan
-3

Zobacz post Davida Ebbo na jego blogu

Zasadniczo wszystko, co musisz zrobić, to utworzyć plik NuGet.Config obok pliku .sln, zawierający:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear/>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
    <add key="aspnetwebstacknightlyrelease" value="https://www.myget.org/f/aspnetwebstacknightlyrelease/" />
  </packageSources>
</configuration>
Rodolpho Brock
źródło
1
Pytanie zawiera pytanie, jak automatycznie zaktualizować plik NuGet.exe do najnowszej wersji podczas korzystania z przywracania pakietów. W poście w blogu Davida Ebbo wyjaśniono tylko, jak przywrócić pakiety przy użyciu narzędzia nuget.exe.
Frith
Powinieneś prawdopodobnie określić, na którą część pytania odpowiadasz, a patrząc na tytuł pytania i zaakceptowaną odpowiedź, łatwo jest uznać tę odpowiedź za niewłaściwą ...
Jens