Ponowne instalowanie i aktualizowanie pakietów NuGet w programie Visual Studio

Czasami odwołania do pakietów mogą być przerywane w projekcie programu Visual Studio. Odinstalowanie i ponowne zainstalowanie tej samej wersji pakietu często przywraca odwołania do kolejności roboczej. Aktualizowanie pakietu, który instaluje zaktualizowaną wersję, może również rozwiązać problem. W tym artykule opisano sposób ponownego instalowania i aktualizowania pakietów NuGet w celu adresowania uszkodzonych odwołań do pakietów i uszkodzonych projektów.

Uwaga

Wskazówki zawarte w tym artykule dotyczą tylko projektów korzystających z formatu zarządzania packages.config . W przypadku projektów PackageReference operacja przywracania automatycznie naprawia uszkodzone odwołania.

Typowe scenariusze

Poniżej przedstawiono kilka typowych scenariuszy, w których można napotkać uszkodzone odwołania do pakietu w projekcie programu Visual Studio.

Scenariusz opis Rozwiązanie
Uszkodzone odwołania po przywróceniu pakietu Otwierasz projekt programu Visual Studio i przywracasz pakiety NuGet, ale pozostają uszkodzone odwołania do pakietów. Aby naprawić odwołania, spróbuj ponownie zainstalować każdy pakiet oddzielnie.
Uszkodzony projekt z powodu usuniętych plików Usunięte (brakujące) pliki pakietów powodują przerwanie projektu. Pakiet NuGet nie zapobiega usuwaniu elementów dodanych z pakietów. Można łatwo przypadkowo zmodyfikować zawartość zainstalowaną z pakietu i przerwać projekt. Aby przywrócić projekt, spróbuj ponownie zainstalować pakiety, których dotyczy problem.
Uszkodzony projekt po aktualizacji pakietu Aktualizacja pakietu przerywa projekt. Aktualizacje towarzyszące pakietu zależności zwykle powodują ten typ awarii. Aby przywrócić stan zależności do poprzedniego porządku roboczego, spróbuj ponownie zainstalować określony pakiet zależny.
Przerwane odwołania po retarget lub uaktualnieniu projektu Proces ponownego pobierania lub uaktualniania projektu powoduje uszkodzenie odwołań do pakietu. Po ponownym utworzeniu projektu program NuGet wyświetli błąd kompilacji. Ostrzeżenia kompilacji zawierają listę pakietów, które mogą wymagać ponownej instalacji. Lub po uaktualnieniu projektu program NuGet wyświetla błąd w dzienniku uaktualniania projektu. Plik dziennika zawiera listę pakietów, które mogą wymagać ponownej instalacji. Aby rozwiązać problemy ze względu na zmianę struktury docelowej, spróbuj ponownie zainstalować co najmniej jeden pakiet.
Zmiany pakietów w ramach programowania Autorzy pakietów często muszą ponownie zainstalować tę samą wersję pakietu, który obecnie opracowuje, aby przetestować zmiany. Konsola Menedżer pakietów NuGet w programie Visual Studio oferuje elastyczne opcje aktualizowania i ponownego instalowania pakietów. Aby ponownie zainstalować pakiet w ramach programowania, możesz użyć Update-Package -reinstall polecenia .

Opcje implementacji

Istnieje kilka opcji aktualizowania i ponownego instalowania pakietów NuGet. Typowe metody obejmują opcje interfejsu użytkownika Menedżer pakietów NuGet, konsolę Menedżer pakietów NuGet i interfejs wiersza polecenia NuGet (interfejs wiersza polecenia).

Interfejs użytkownika menedżera pakietów

Oprócz interfejsu konsoli interfejs użytkownika Menedżer pakietów udostępnia również opcje menu umożliwiające instalowanie, aktualizowanie i odinstalowywanie pakietów.

  • Aby zaktualizować pakiet, otwórz kartę Aktualizacje, wybierz co najmniej jeden pakiet, a następnie wybierz pozycję Aktualizuj.

  • Aby ponownie zainstalować pakiet, najpierw odinstaluj pakiet, a następnie zainstaluj go ponownie. Otwórz kartę Zainstalowane , wybierz pakiet i zapisz jego nazwę, a następnie wybierz pozycję Odinstaluj. Przejdź do karty Przeglądaj i wyszukaj nazwę pakietu, wybierz pakiet, a następnie wybierz pozycję Zainstaluj.

Konsola menedżera pakietów

Dostęp do konsoli Menedżer pakietów można uzyskać w obszarze Narzędzia Menedżer pakietów>> NuGet Menedżer pakietów Console.

  • Aby zaktualizować pakiet, Menedżer pakietów Console udostępnia Update-Package polecenie .

  • Aby ponownie zainstalować pakiet, możesz użyć tego samego polecenia z parametrem -reinstall . Ta metoda jest najprostszą opcją, jeśli jest zgodna z konfiguracją.

Aby uzyskać więcej informacji, zobacz sekcje Update-Package i Package reinstall considerations (Zagadnienia dotyczące ponownej instalacji pakietu).

Interfejs wiersza polecenia narzędzia NuGet

Interfejs wiersza polecenia NuGet, nuget.exe, jest narzędziem wiersza polecenia dla systemu Windows, który zapewnia wszystkie funkcje NuGet.

  • Aby zaktualizować zainstalowany pakiet, uruchom nuget update polecenie .

  • Aby ponownie zainstalować wszystkie pakiety NuGet, usuń folder pakietu, a następnie uruchom nuget install polecenie .

  • Aby ponownie zainstalować pojedynczy pakiet, usuń folder pakietu, a następnie uruchom nuget install <id> polecenie , gdzie <id> argument jest identyfikatorem określonego pakietu.

Uwaga

W przypadku interfejsu wiersza polecenia dotnet równoważna procedura nie jest wymagana. Po uruchomieniu dotnet restore polecenia interfejs wiersza polecenia dotnet używa narzędzia NuGet do określania zależności i pobierania wszelkich niezbędnych pakietów NuGet. Aby uzyskać więcej informacji, zobacz Przywracanie pakietów NuGet za pomocą interfejsu wiersza polecenia dotnet.

Ograniczenia dotyczące wersji uaktualniania

Domyślnie ponowne instalowanie lub aktualizowanie pakietu zawsze instaluje najnowszą wersję dostępną ze źródła pakietu. Jednak projekty korzystające z packages.config formatu zarządzania mogą ograniczyć dozwolony zakres wersji pakietu NuGet.

Załóżmy, że aplikacja działa tylko w wersji 1.x pakietu, ale nie w wersji 2.0 lub nowszej z powodu poważnej zmiany interfejsu API pakietu. Aby upewnić się, że aplikacja działa zgodnie z oczekiwaniami, należy ograniczyć uaktualnienia pakietów NuGet tylko do wersji 1.x. Ograniczenie pomaga zapobiec przypadkowym aktualizacjom, które mogą spowodować uszkodzenie aplikacji.

Aby ustawić ograniczenie, otwórz packages.config plik w edytorze tekstów. Znajdź zależność, którą chcesz ograniczyć, i dodaj allowedVersions atrybut z żądanym zakresem wersji.

W poniższym przykładzie pokazano, jak ograniczyć aktualizacje do wersji 1.x przez ustawienie atrybutu allowedVersions na [1,2):

<?xml version="1.0" encoding="utf-8"?>
<packages>
    <package id="ExamplePackage" version="1.1.0" allowedVersions="[1,2)" />

    <!-- ... -->
</packages>

We wszystkich przypadkach użyj notacji opisanej w temacie Przechowywanie wersji pakietów.

Polecenie Update-Package

Polecenie Update-Package w konsoli Menedżer pakietów jest najprostszym sposobem ponownego zainstalowania pakietu i adresu uszkodzonych odwołań. Jednak takie podejście nie jest możliwe do użycia we wszystkich scenariuszach. Możesz użyć polecenia , aby zaktualizować zainstalowany pakiet, ale nie wykonać początkowej instalacji. Jeśli spróbujesz zaktualizować lub ponownie zainstalować pakiet, który nie został jeszcze zainstalowany w konfiguracji, polecenie zwróci błąd. Przed rozpoczęciem pracy z poleceniem zapoznaj się z sekcją Zagadnienia dotyczące ponownej instalacji pakietu.

Aktualizowanie pakietów w projekcie lub rozwiązaniu przy użyciu funkcji PackageReference zawsze aktualizuje najnowszą wersję pakietu (z wyjątkiem pakietów wstępnych). Projekty korzystające z packages.config formatu zarządzania mogą ograniczać wersje uaktualniania zgodnie z opisem w temacie Ograniczenia dotyczące wersji uaktualnienia.

W poniższych sekcjach przedstawiono przykłady pracy z poleceniem .

Ponowne instalowanie opcji pakietu

Poniżej przedstawiono podstawowe użycie polecenia w celu przeprowadzenia ponownej instalacji. Aby zidentyfikować określony pakiet NuGet, możesz użyć opcjonalnego -Id parametru.

# Reinstall the package named <package_name>
Update-Package -Id <package_name> –reinstall

Update-Package Użycie polecenia jest łatwiejsze niż usuwanie pakietu, a następnie próba zlokalizowania tego samego pakietu w galerii NuGet z tą samą wersją.

Aktualizowanie opcji pakietu

To samo polecenie bez parametru -reinstall aktualizuje pakiet do nowszej wersji, jeśli ma to zastosowanie. Polecenie zwraca błąd, jeśli określony pakiet nie został jeszcze zainstalowany w projekcie.

# Update the package named <package_name>
Update-Package <package_name>

Opcje projektu i rozwiązania

Domyślnie Update-Package polecenie ma wpływ na wszystkie projekty w rozwiązaniu. Aby ograniczyć akcję do określonego projektu, użyj parametru -ProjectName . Podaj nazwę projektu wyświetlaną w programie Visual Studio Eksplorator rozwiązań.

Następujące polecenie ponownie instaluje pakiet NuGet dla określonego projektu w rozwiązaniu. Nazwa określonego pakietu NuGet do ponownego zainstalowania jest podana w parametrze <package_name> .

# Reinstall the package named <package_name> in MyProject only
Update-Package <package_name> -ProjectName MyProject -reinstall

Jeśli chcesz ponownie zainstalować wszystkie pakiety w projekcie, użyj parametru -ProjectName , aby nie określić żadnego określonego pakietu. Możesz stosować to samo podejście, aby zaktualizować pakiety w projekcie, jak pokazano w tym przykładzie:

# Update all packages in MyProject only
Update-Package -ProjectName MyProject

Aby zaktualizować wszystkie pakiety w rozwiązaniu, wystarczy użyć Update-Package samego polecenia bez innych argumentów ani parametrów.

Ważne

Pamiętaj, aby dokładnie użyć następującej formy polecenia. Proces polecenia może zająć dużo czasu, aby wykonać wszystkie aktualizacje.

# Update all packages in all projects in the solution
Update-Package 

Zagadnienia dotyczące ponownej instalacji pakietu

Jeśli zamierzasz użyć Update-Package polecenia w celu ponownego zainstalowania pakietów, zapoznaj się z poniższymi zagadnieniami, aby zapewnić zgodność ze scenariuszem konfiguracji.

  • Pakiety i ich zależności mogą nie obsługiwać ponownie docelowej platformy docelowej projektu.
  • requireReinstallation Gdy atrybut jest ustawiony na true, program Visual Studio wystawia ostrzeżenia kompilacji dla pakietów, których dotyczy problem.
  • Ponowne zainstalowanie pakietu i ograniczeń wersji może powodować problemy ze zgodnością wersji zależności.
  • Ponowne zainstalowanie określonego pakietu może spowodować przerwanie pakietów zależnych.

Pakiet nie obsługuje platformy docelowej projektu

Jeśli retargetujesz strukturę docelową projektu, co najmniej jeden pakiet może nie obsługiwać nowej konfiguracji docelowej.

Zazwyczaj ponowne instalowanie pakietu za Update-Package –reinstall <package_name> pomocą polecenia działa. Pakiet zainstalowany na starej platformie docelowej jest odinstalowywane, a ten sam pakiet jest instalowany w nowej strukturze docelowej projektu.

W niektórych przypadkach pakiet może nie obsługiwać nowej platformy docelowej. Poniżej przedstawiono niektóre problemy, które mogą wystąpić:

  • Jeśli pakiet obsługuje przenośne biblioteki klas (PCLS), a projekt zostanie ponownie utworzony w połączeniu platform, które nie są już obsługiwane przez pakiet, odwołania do pakietu mogą brakować po ponownym zainstalowaniu.

  • Ten problem może dotyczyć pakietów używanych bezpośrednio lub pakietów zainstalowanych jako zależności. Każdy używany bezpośrednio pakiet może obsługiwać nową platformę docelową, podczas gdy ich zależności nie są obsługiwane.

  • Jeśli ponowne zainstalowanie pakietów po ponownym utworzeniu aplikacji spowoduje błędy kompilacji lub środowiska uruchomieniowego, może być konieczne przywrócenie platformy docelowej lub wyszukanie alternatywnych pakietów, które prawidłowo obsługują nową platformę docelową.

requireReinstallation, atrybut ustawiony na true

Po ponownym uruchomieniu struktury docelowej projektu lub uaktualnieniu pakietów NuGet pakiet NuGet może dodać requireReinstallation atrybut do packages.config pliku projektu. Jeśli program NuGet wykryje pakiety, których dotyczy problem podczas procesu ponownego pobierania lub uaktualniania, dodaje requireReinstallation="true" atrybut do packages.config pliku dla wszystkich odwołań do pakietu, których dotyczy problem. W rezultacie każda kolejna kompilacja projektu w programie Visual Studio zgłasza ostrzeżenia kompilacji dla tych pakietów. Ostrzeżenia są wyświetlane jako przypomnienie o ponownym zainstalowaniu pakietu, którego dotyczy problem.

Niezgodność wersji zależności pakietu

Polecenie Update-Package –reinstall ponownie instaluje tę samą wersję zainstalowanego pakietu i najnowszą wersję wszystkich zależności. Aby rozwiązać problemy z niezgodnością wersji, można ustawić ograniczenia zakresu wersji, aby kontrolować konfigurację. Pakiet NuGet jest zgodny z ograniczeniami i aktualizuje zależności pakietów tylko do nowszych wersji, zgodnie z wymaganiami, aby rozwiązać problem.

  • Jeśli ustawienia ograniczeń powodują, że zależność zostanie przywrócona do wcześniejszej wersji podczas ponownej instalacji pakietu, możesz rozwiązać problem z poleceniem Update-Package <dependency_name> . To polecenie ponownie instaluje określoną zależność bez wpływu na pakiet zależny.

  • Możesz również użyć Update-Package –reinstall <packageName> -ignoreDependencies polecenia . Ta opcja ponownie instaluje tę samą wersję oryginalnego pakietu, ale nie instaluje ponownie zależności. Użyj tej metody podczas aktualizowania zależności pakietu może spowodować uszkodzenie stanu konfiguracji.

Uszkodzony pakiet zależny

Po ponownym zainstalowaniu określonego pakietu wszystkie zainstalowane pakiety zależne od ponownie zainstalowanego pakietu nie zostaną zaktualizowane. Wersje tych innych zainstalowanych pakietów pozostają takie same. W związku z tym ponowne zainstalowanie zależności może spowodować przerwanie zależnego pakietu.