Rozwiązywanie problemów z błędami przywracania pakietów
Ten artykuł koncentruje się na typowych błędach podczas przywracania pakietów i kroków ich rozwiązywania.
Przywracanie pakietów próbuje zainstalować wszystkie zależności pakietów w prawidłowym stanie odpowiadającym odwołaniom do pakietu w pliku projektu (csproj) lub pliku packages.config . (W Visual Studio odwołania są wyświetlane w Eksplorator rozwiązań w obszarze Zależności \ NuGet lub węzła Odwołania). Aby wykonać kroki wymagane do przywrócenia pakietów, zobacz Przywracanie pakietów. Jeśli odwołanie do pakietu w pliku projektu (csproj) lub plik packages.config są niepoprawne (są one niezgodne z żądanym stanem po przywróceniu pakietu), należy zainstalować lub zaktualizować pakiety zamiast przy użyciu przywracania pakietów.
Jeśli instrukcje w tym miejscu nie działają, zgłoś problem w GitHub, abyśmy mogli dokładniej zbadać twój scenariusz. Nie używaj kontrolki "Czy ta strona jest przydatna?", która może pojawić się na tej stronie, ponieważ nie daje nam możliwości skontaktowania się z Tobą w celu uzyskania dodatkowych informacji.
Szybkie rozwiązanie dla użytkowników Visual Studio
Jeśli używasz Visual Studio, najpierw włącz przywracanie pakietów w następujący sposób. W przeciwnym razie przejdź do poniższych sekcji.
- Wybierz polecenie menu Narzędzia > NuGet Menedżer pakietów > Menedżer pakietów Ustawienia.
- Ustaw obie opcje w obszarze Przywracanie pakietu.
- Wybierz przycisk OK.
- Ponownie skompiluj projekt.
Te ustawienia można również zmienić w NuGet.Config
pliku. Zobacz sekcję zgody . Jeśli projekt jest starszym projektem korzystającym z przywracania pakietu zintegrowanego z MSBuild, może być konieczne przeprowadzenie migracji do automatycznego przywracania pakietów.
Ten projekt odwołuje się do pakietów NuGet, których brakuje na tym komputerze
Pełny komunikat o błędzie:
This project references NuGet package(s) that are missing on this computer.
Use NuGet Package Restore to download them. The missing file is {name}.
Ten błąd występuje podczas próby skompilowania projektu zawierającego odwołania do co najmniej jednego pakietu NuGet, ale te pakiety nie są obecnie zainstalowane na komputerze lub w projekcie.
- W przypadku korzystania z formatu zarządzania PackageReference ten błąd może być resztką z packages.config do migracji PackageReference i należy go ręcznie usunąć z pliku projektu.
- W przypadku korzystania z packages.configbłąd oznacza, że pakiet nie jest zainstalowany w
packages
folderze w katalogu głównym rozwiązania.
Taka sytuacja występuje często, gdy uzyskujesz kod źródłowy projektu z kontroli źródła lub innego pobierania. Pakiety są zwykle pomijane z kontroli źródła lub pobierania, ponieważ można je przywrócić z kanałów informacyjnych pakietów, takich jak nuget.org (zobacz Pakiety i kontrola źródła). Dołączenie ich w przeciwnym razie spowodowałoby wyboczenie repozytorium lub utworzenie niepotrzebnie dużych plików .zip.
Ten błąd może również wystąpić, jeśli plik projektu zawiera ścieżki bezwzględne do lokalizacji pakietów, a projekt zostanie przeniesiony.
Aby przywrócić pakiety, użyj jednej z następujących metod:
- Jeśli plik projektu został przeniesiony, przeprowadź edycję pliku bezpośrednio, aby zaktualizować odwołania do pakietu.
- Visual Studio (automatyczne przywracanie lub ręczne przywracanie)
- Interfejs wiersza polecenia dotnet
- Interfejs wiersza polecenia nuget.exe
- MSBuild
- Azure Pipelines
- Azure DevOps Server
Po pomyślnym przywróceniu pakiet powinien znajdować się w folderze global-packages . W przypadku projektów korzystających z funkcji PackageReference przywracanie powinno ponownie utworzyć obj/project.assets.json
plik. W przypadku projektów przy użyciu packages.config
polecenia pakiet powinien pojawić się w folderze projektu packages
. Projekt powinien teraz pomyślnie skompilować. Jeśli nie, zgłoś problem w GitHub, abyśmy mogli cię śledzić.
Nie można odnaleźć pliku Assets project.assets.json
Pełny komunikat o błędzie:
Assets file '<path>\project.assets.json' not found. Run a NuGet package restore to generate this file.
Plik project.assets.json
utrzymuje graf zależności projektu podczas korzystania z formatu zarządzania PackageReference, który służy do upewnienia się, że wszystkie niezbędne pakiety są zainstalowane na komputerze. Ponieważ ten plik jest generowany dynamicznie za pomocą przywracania pakietu, zwykle nie jest dodawany do kontroli źródła. W związku z tym ten błąd występuje podczas kompilowania projektu za pomocą narzędzia, takiego jak msbuild
to, które nie powoduje automatycznego przywracania pakietów.
W takim przypadku uruchom msbuild -t:restore
polecenie , a następnie msbuild
użyj polecenia dotnet build
(które automatycznie przywraca pakiety). Możesz również użyć dowolnej z metod przywracania pakietów w poprzedniej sekcji.
Co najmniej jeden pakiet NuGet musi zostać przywrócony, ale nie można go przywrócić, ponieważ nie udzielono zgody
Pełny komunikat o błędzie:
One or more NuGet packages need to be restored but couldn't be because consent has
not been granted. To give consent, open the Visual Studio Options dialog, click on
the NuGet Package Manager node and check 'Allow NuGet to download missing packages
during build.' You can also give consent by setting the environment variable
'EnableNuGetPackageRestore' to 'true'. Missing packages: {name}
Ten błąd wskazuje, że przywracanie pakietu jest wyłączone w konfiguracji NuGet.
Odpowiednie ustawienia można zmienić w Visual Studio zgodnie z wcześniejszym opisem w obszarze Szybkie rozwiązanie dla użytkowników Visual Studio.
Te ustawienia można również edytować bezpośrednio w odpowiednim nuget.config
pliku (zazwyczaj %AppData%\NuGet\NuGet.Config
w Windows i ~/.nuget/NuGet/NuGet.Config
w systemie Mac/Linux). Upewnij się, że klucze enabled
i automatic
w obszarze packageRestore
mają ustawioną wartość True:
<!-- Package restore is enabled -->
<configuration>
<packageRestore>
<add key="enabled" value="True" />
<add key="automatic" value="True" />
</packageRestore>
</configuration>
Ważne
Jeśli edytujesz packageRestore
ustawienia bezpośrednio w nuget.config
programie , uruchom ponownie Visual Studio, aby okno dialogowe opcji pokazywało bieżące wartości.
Inne potencjalne warunki
Mogą wystąpić błędy kompilacji z powodu brakujących plików z komunikatem informującym o użyciu funkcji przywracania NuGet w celu ich pobrania. Jednak uruchomienie przywracania może spowodować, że "Wszystkie pakiety są już zainstalowane i nie ma nic do przywrócenia". W takim przypadku usuń
packages
folder (w przypadku używaniapackages.config
polecenia ) lubobj/project.assets.json
plik (w przypadku korzystania z funkcji PackageReference) i ponownie uruchom przywracanie. Jeśli błąd nadal występuje, użyj polecenianuget locals all -clear
lubdotnet nuget locals all --clear
z wiersza polecenia, aby wyczyścić globalne pakiety i foldery pamięci podręcznej zgodnie z opisem w temacie Managing the global packages and cache folders (Zarządzanie globalnymi pakietami i folderami pamięci podręcznej).Podczas uzyskiwania projektu z kontroli źródła foldery projektu mogą być ustawione na tylko do odczytu. Zmień uprawnienia folderu i spróbuj przywrócić pakiety ponownie.
Być może używasz starej wersji NuGet. Sprawdź nuget.org/downloads , aby zapoznać się z najnowszymi zalecanymi wersjami. W przypadku Visual Studio 2015 zalecamy użycie wersji 3.6.0.
Jeśli wystąpią inne problemy, zgłoś problem na GitHub, abyśmy mogli uzyskać więcej szczegółów od Ciebie.