NuGet 패키지 복원이 작동하지 않습니다


165

한 컴퓨터에서 프로젝트를 체크인하고 다른 컴퓨터에서 체크 아웃했으며 NuGet에 의해 설치된 바이너리가 누락 된 것을 발견했습니다. 소스 제어도 확인할 수 있지만 더 나은 해결책이있는 것 같습니다.

http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

나는 그 지침을 따랐으며 이제 .nuget폴더가 있어야하며 내 .csproj 파일에 다음 항목이 있습니다.

<RestorePackages>true</RestorePackages>
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />

그러나 솔루션을 다시 빌드 할 때 누락 된 패키지는 복원되지 않습니다.

내가 무엇을 놓치고 있습니까? 이 문제를 어떻게 진단 할 수 있습니까?


출력 로그에 nuget.exe가 실행되고 있습니까?
Pranav

그리고 중요한 것은 : 출력 로그에 오류가 있습니까?
maartenba

답변:


272

nuget 패키지 관리자 콘솔에서 다음 명령을 실행하여 패키지 복원을 강제 실행할 수 있습니다.

업데이트 패키지-다시 설치

솔루션의 모든 것을 강제로 다시 설치합니다.


업데이트 패키지-재설치-ProjectName myProj

myProj 프로젝트의 모든 것을 강제로 다시 설치합니다.

참고 : 이것은 핵 옵션입니다. 이 명령을 사용할 때 설치 한 것과 동일한 버전의 패키지를 얻지 못할 수 있으며 이로 인해 문제가 발생할 수 있습니다. 솔루션 수준이 아니라 프로젝트 수준에서 발생할 가능성이 적습니다.

-safe명령 행 매개 변수 옵션을 사용하여 동일한 주 및 부 버전 구성 요소가있는 최신 버전으로 업그레이드를 제한 할 수 있습니다 . 이 옵션은 나중에 추가되어 주석에 언급 된 일부 문제를 해결합니다.

업데이트 패키지-재설치-안전


7
@ NightOwl888은 실제로 DLL 지옥 바인딩 문제가 있었지만 운 좋게 작동하지 않는 한 그렇게 할 수있는 방법이 없어야하기 때문에 신경 쓸 필요가 있다고보고 된 것 같습니다.
Chris Marisic

4
@nightowl 소스 컨트롤을 사용하는 경우 변경 사항을 백업하는 것이 어렵지 않아야합니다.
ErikE

4
여기서 주요 단점은 패키지 버전이 유지되지 않으므로 최신 패키지 버전이 설치된다는 것입니다. 프로젝트가 새 버전과 호환되지 않는 경우 문제가 될 수 있습니다.
JDandChips

4
예, Update-Package -Reinstall이 저에게 효과적이었습니다. IDE가 왜 그렇게하지 않는지 모르겠습니다. 모든 것이 올바르게 설정되었습니다. Ugghh, 맹세합니다. NuGet은 훌륭하고 귀찮습니다.
Jeremy Ray Brown

2
"중요! 프로젝트를 파괴 할 수 있습니다"라는 대답을 아래에서 추가하십시오.
devman

25

이 게시물을 우연히 본 다른 사람들을 위해 이것을 읽으십시오.

NuGet 2.7+는 자동 패키지 복원 을 소개했습니다 . 이것은 MSBuild 프로세스를 변경하지 않기 때문에 대부분의 응용 프로그램에서 훨씬 더 나은 접근 방법으로 간주됩니다. 덜 두통.

시작할 수있는 몇 가지 링크 :


2
NuGet의 현재 버전에 적합한 답변을 주셔서 감사합니다.
에릭 제이

20

다음 중 한 가지 방법을 선택해야합니다.

모든 솔루션 프로젝트에서 이름으로 패키지를 다시 설치하십시오.

Update-Package –reinstall <packageName>

이름으로 패키지를 다시 설치하고 모든 솔루션 프로젝트에서 종속성을 무시합니다.

Update-Package –reinstall <packageName> -ignoreDependencies

프로젝트에서 이름으로 패키지를 다시 설치하십시오.

Update-Package –reinstall <packageName> <projectName>

특정 프로젝트에서 모든 패키지를 다시 설치하십시오.

Update-Package -reinstall -ProjectName <projectName>

솔루션에서 모든 패키지를 다시 설치하십시오.

Update-Package -reinstall 

내 문제를 빠르고 더러운 스타일로 해결했습니다.
blackorchid

20

패키지 / 이진이없는 프로젝트에서 패키지 복원 모드를 활성화 했습니까? 복원 모드를 활성화 할 때 패키지를 올바르게 설치해야하는 알려진 문제가 있습니다.

http://nuget.codeplex.com/workitem/1879


원본 링크가 죽었습니다. 이것은 교체 일 수 있습니다 : https://github.com/NuGet/Home/issues/1968


3
링크 주셔서 감사합니다. 누락 된 패키지 / 바이너리가있는 프로젝트에서 패키지 복원 모드를 활성화하는 것이 일반적인 경우입니다. 패키지가없는 경우 패키지를 가져 오려고 할 때입니다. 사용 사례가 실패합니다.
Anthony

2
"패키지가없는 프로젝트에서 패키지 복원 모드를 활성화하십시오"라고 말하면 무슨 뜻입니까? 그렇게하기 위해 실행해야하는 콘솔 명령이 있습니까?
CodeWarrior

90
NuGet은 매일 실패하지만 완전히 멸시합니다.
Jammer

14

VS 2017

도구> NuGet 패키지 관리자> 패키지 관리자 설정> 일반 "모든 NuGet 캐시 지우기"를 클릭하십시오.


소스 제어에서 솔루션을 확인할 때 (DevOps / Git와 함께 Visual Studio Team Explorer를 사용하여 관리) 빌드 누락이 불가능하여 패키지를 복원 할 수 없었습니다. 이 솔루션은이 상황에 맞는 솔루션이었습니다.
PJRobot

12

두 가지 시나리오 에서이 문제가 발생했습니다.

먼저 msbuild.exe를 사용하여 명령 줄에서 솔루션을 빌드하려고합니다. 둘째, TFS 및 CI를 사용하여 빌드 서버에서 sln 및 포함 프로젝트를 빌드하려고 할 때.

참조가 누락되었다고 주장하는 오류가 발생합니다. 로컬 빌드 디렉토리와 TFS 서버를 모두 검사 할 때 / packages 폴더가 생성되지 않고 nuget 패키지가 복사되지 않는 것을 알 수 있습니다. Alexandre의 답변에 나열된 지침에 따라 http://nuget.codeplex.com/workitem/1879 도 작동하지 않았습니다.

VS2010을 통해 패키지 복원을 활성화했으며 VS2010 내에서만 빌드가 작동하는 것을 보았습니다. 다시 말하지만 msbuild 사용이 실패합니다. 해결 방법은 완전히 유효하지 않지만 내 환경의 경우 명령 줄 빌드와 TFS의 CI 빌드에서 모든 것이 작동합니다.

. \ nuget으로 이동하여 .nuget \ NuGet.targets 파일에서이 줄을 변경했습니다.

에서:

<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" -o "$(PackagesDir)"</RestoreCommand>

to : (주의 사항, 변수 주위에 따옴표가 없음)

<RestoreCommand>$(NuGetCommand) install $(PackagesConfig) -source $(PackageSources) -o $(PackagesDir)</RestoreCommand>

내 디렉토리에 공백이 있으면 실패하지만 디렉토리에 공백이 없으므로이 해결 방법으로 빌드가 성공적으로 완료되었습니다 ... 당분간.

빌드에서 진단 수준 로깅을 설정하면 msbuild에서 실행중인 명령을 표시하는 데 도움이됩니다. 이것이 목표 파일을 일시적으로 해킹하게 한 것입니다.


큰 따옴표로 인해 문제가 발생했으며 동일한 수정 작업을 수행해야했습니다. 매우 실망스러운!
그렉

5

다른 방법으로 문제가 해결되지 않으면 다음을 시도하십시오.

  1. 프로젝트를 닫습니다.
  2. 솔루션 폴더에서 패키지 폴더를 삭제하십시오.
  3. 프로젝트를 다시 열고 너겟 패키지를 다시 복원하십시오.

나를 위해 일했고 시도하기 쉽습니다.


2
이것은 나를 위해 일했습니다. 3 단계에서는 패키지를 수동으로 복원 할 필요가 없었으며 프로젝트를 열 때 자동으로 복원되었습니다.
Tawab Wakil

5

다른 답변이 도움이되지 않으면 다음 중 하나를 시도해보십시오.

당신의 찾기 .csproj파일을 텍스트 편집기에서 편집하십시오.

에서 <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">태그를 찾으 십시오.csproj파일 전체 블록을 삭제하십시오.

솔루션에 모든 패키지를 다시 설치하십시오.

Update-Package -reinstall

이 후 너겟 패키지를 복원해야한다고 생각합니다. 프로젝트를 다른 위치로 옮길 때만 발생하는 문제 일 수 있습니다.


이것은 나를 완전히 견디지 못하게했습니다. 감사!
Jeff Hay

4

이 문제가 발생할 수있는 다른 사람들을 위해 Visual Studio를 닫고 프로젝트를 다시 열어 문제를 해결할 수있었습니다. 프로젝트가로드되면 초기화 단계에서 패키지가 복원되었습니다.


4

나를 위해 .csproj에 빈 태그 NuGetPackageImportStamp가 있습니다.

<NuGetPackageImportStamp>
    </NuGetPackageImportStamp>

이상적인 GUID를 포함하는 것이 이상적입니다.

위의 태그를 제거한 다음 "Reget Nugets"가 효과적이었습니다.


1

때때로 이상한 일이 발생하고 Visual Studio를 사용하여 자동 복원이 작동하지 않습니다. 이 경우 NuGet Package Manager 콘솔을 사용할 수 있습니다. Visual Studio 내에서 도구-> NuGet 패키지 관리자-> 패키지 관리자 콘솔 에서 열립니다 . 콘솔 내의 명령은 간단합니다. 명령을 입력하는 동안 상황에 맞는 도움말을 얻으려면 버튼을 누르면 입력하는 문자로 시작하는 모든 옵션이 제공됩니다. 따라서 패키지가 설치되지 않은 경우 (예 : log4net) 다음 명령을 입력하십시오.

설치 패키지 log4net

설치할 버전 지정, 패키지 업데이트, 패키지 제거 등과 같이 훨씬 더 많은 작업을 수행 할 수 있습니다.

Visual Studio가 이상하게 행동했을 때 나를 돕기 위해 콘솔을 사용해야했습니다.


1

다음과 같은 이유로 자동 패키지 복원이 실패합니다.

  1. 솔루션의 .nuget 폴더 (솔루션 루트 폴더에 있음)에서 NuGet.exe 및 NuGet.targets 파일을 제거하지 않았습니다.
  2. 도구 >> 옵션 >> Nuget Package Manager >> 일반 설정에서 자동 패키지 복원을 활성화하지 않았습니다.
  3. 모든 프로젝트에서 Nuget.targets 파일에 대한 참조를 수동으로 제거하는 것을 잊었습니다.
  4. Visual Studio를 다시 시작해야합니다 (다시 시작하기 전에 작업 관리자에서 프로세스가 종료되었는지 확인).

다음 기사는 1 ~ 3 점을 다루는 방법을보다 자세하게 설명합니다. https://docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore


1
# 1 지점과 관련하여 제공하는 링크는 다음과 같은 조언과 모순됩니다. "TFS를 사용하는 경우 1. 솔루션의 .nuget 폴더에서 NuGet.exe 및 NuGet.targets 파일을 제거하십시오. 2. 계속해서 우회하도록 NuGet.Config 파일을 유지하십시오. 소스 제어에 패키지 추가 "
앤드류 데니슨

1

시스템에서 시스템 복원을 수행 한 후 NuGet 패키지가 중단되어 약 2 일 동안 백업했습니다. (그 동안 NuGet 패키지가 설치되었습니다.)이를 수정하려면 사용자 프로필의 .nuget \ packages 폴더로 이동하여 패키지를 찾아 삭제해야했습니다. 그래야만 Visual Studio는 패키지를 새로 가져 와서 참조로 올바르게 추가합니다.


1

처음부터 새 프로젝트를 만드는 가장 좋은 해결 방법은 코드와 함께 모든 소스 파일을 가져옵니다. 내 프로젝트는 그렇게 복잡하지 않아서 아무런 문제가 없었습니다.


1

내 상황에서 다른 솔루션은 작동하지 않았습니다.

AspNetCore 종속성이 설치 / 제거되어 캐시되었습니다. 'AspNetCore.All'은 제대로 업데이트 / 설치 / 제거를 거부합니다. 그리고 내가 한 일에 관계없이 캐시 된 종속성 (호환되지 않은)은 더 높은 버전이기 때문에 사용합니다.

  1. 모든 것을 백업하십시오. 다시 설치해야 할 종속성 목록을 확인한 후 VisualStudio를 종료하십시오.
  2. 텍스트 편집기에서 모든 .proj 파일을 열고 모두 제거 PackageReference
  3. 각 프로젝트에서 bin,obj 폴더를
  4. 솔루션에서 찾은 "패키지"폴더를 삭제하십시오.
  5. 오픈 솔루션으로 이동 Tools > Nuget Package Manager > Package Manager Settings하고Clear all Nuget caches . 일부 항목을 제거하지 못할 수 있으므로 콘솔을 확인하십시오. 폴더 경로를 복사하고 Visual Studio를 종료하십시오.
  6. 해당 폴더에서 무엇이든 삭제 솔루션을 다시 열고 처음부터 nuget 패키지 설치를 시작하십시오.

그래도 문제가 해결되지 않으면 Windows 탐색기에서 드라이브를 반복해서 검색 nuget하고 캐시 된 항목을 삭제하십시오.


0

vs2015 no nuget 복원 문제가 없습니다. 내 해결책 :

  1. 폴더 .nuget 추가, 디렉토리 .nuget 파일 NuGet.Config 및 NuGet.targets 추가

  2. 각 프로젝트 파일 추가 : 빌드

  <RestorePackages>true</RestorePackages>

  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
  </Target>

이것이 옛날 방식입니다. @davenewza 답변을 참조하고, 그의 링크하는 blog.davidebbo.com/2014/01/...
timB33

0

직면 한 오류가 "원격 서버에 연결할 수 없음"인 경우 위의 주석에 제공된 검사 외에도이 검사를 수행하는 것이 좋습니다.

패키지를 다운로드 할 수있는 2 개의 NUGET 패키지 소스가 있음을 보았습니다 (도구-> 너겟 패키지 관리자-> 패키지 관리자 설정 내). 패키지 소스 중 하나가 작동하지 않았으며 Nuget은 해당 소스에서만 다운로드를 시도했습니다.

설정에서 https://www.nuget.org/api/v2/ EXPLICTLY에서 다운로드하기 위해 패키지 소스를 변경하면 문제가 발생했습니다.


0

필자의 경우 중단 된 Nuget 복원 시도로 packages.config솔루션 의 파일 중 하나가 손상 되었습니다. 내 자식 작업 트리를 확인하기 전에 이것을 발견하지 못했습니다. 파일의 변경 사항을 되 돌린 후 Nuget 복원이 다시 작동했습니다.


0

Nuget 복원 작업을 수행하는 바로 가기가 있습니다. 1. VS 도구 옵션 메뉴에서 인터넷 연결 또는 Nuget URL이 올바른지 확인하십시오. 2. 솔루션에서 .nuget 또는 nuget 폴더를 확인하십시오.

  1. 존재하는 경우 패키지 폴더 삭제

  2. 패키지 관리자 콘솔을 열고이 명령을 실행하십시오.

    • nuget.exe의 전체 경로 붙여 넣기 .sln 파일의 전체 경로를 복원하십시오!
  3. 누락 된 참조에 대해 빌드가 완료되지 않은 경우 Install-pacakge 명령을 사용하십시오. 도움이되기를 바랍니다 (HIH)

0

VS2017에서 솔루션 => Open CommandLine => Developer Command Line을 마우스 오른쪽 버튼으로 클릭하십시오.

일단 열면 입력하고 (다음에 Enter 키를 누름)

dotnet restore

그러면 모든 / 모든 패키지가 복원되며 수행 된 작업에 대한 멋진 콘솔 출력을 얻을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.