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.

  1. Wybierz polecenie menu Narzędzia > NuGet Menedżer pakietów > Menedżer pakietów Ustawienia.
  2. Ustaw obie opcje w obszarze Przywracanie pakietu.
  3. Wybierz przycisk OK.
  4. Ponownie skompiluj projekt.

Enable NuGet package restore in Tool/Options

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:

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.configpolecenia 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 msbuildużyj polecenia dotnet build (które automatycznie przywraca pakiety). Możesz również użyć dowolnej z metod przywracania pakietów w poprzedniej sekcji.

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.configprogramie , 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żywania packages.configpolecenia ) lub obj/project.assets.json plik (w przypadku korzystania z funkcji PackageReference) i ponownie uruchom przywracanie. Jeśli błąd nadal występuje, użyj polecenia nuget locals all -clear lub dotnet 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.