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 natrue
, 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.
Powiązane artykuły
- Przejrzyj format zarządzania packages.config.
- Zaimplementuj funkcję PackageReference w plikach projektu.
- Użyj polecenia Update-Package w konsoli Menedżer pakietów NuGet w programie Visual Studio.
- Zapoznaj się z formatami notacji przechowywania wersji pakietów.