본문 바로가기
Development/.NET

[.NET] NuGet 패키지 업데이트 시 "패키지를 찾을 수 없습니다" 오류 해결 방법

by Kyunghoon Kim 2024. 6. 22.

 Node.js 및 JavaScript 환경에서 사용할 수 있는 NPM (Node Package Manager) 소프트웨어 패키지가 있는 것처럼. NET 생태계에는 NuGet이 존재합니다. 필요한 NuGet 패키지 설치 후 상위 버전이 릴리즈 되어 업데이트가 필요한 경우가 있는데요

 이때 업데이트를 시도하려고 하면 오류가 발생하는 경우가 있습니다. 업데이트에 실패하는 주요 원인은 여러 가지가 있을 수 있지만 자주 발생하는 원인이 몇 가지 알아보겠습니다.

 

Package Not Found (패키지 찾을 수 없음)

 첫 번째는 패키지를 찾을 수 없는 오류입니다. 개발하면서 해당 오류와 더불어 아래의 종속성 해결 불가 오류를 가장 많이 맞닥뜨린 것 같습니다.

 해당 오류는 NuGet이 나열된 소스에서 지정된 패키지를 찾을 수 없을 때, 구성된 패키지 소스에서 패키지를 사용할 수 없거나 패키지 이름에 오타가 있는 경우 발생할 수 있습니다. 또한 누락된 패키지 해결을 위한 빠른 복원 작업이 필요할 때 발생합니다.

Unable to find package 'PackageId'. No packages exist with this id in source(s): sourceA, sourceB, sourceC

Unable to find package 'PackageId'. No packages exist with this id in source(s): sourceA PackageSourceMapping is enabled, the following source(s) were not considered: sourceB, sourceC.

NU1101: Unable to find package [PackageName]. No packages exist with this id in source(s): [SourceName]. Quick Restore (QR) required.

https://learn.microsoft.com/en-us/nuget/reference/errors-and-warnings/nu1101

Unable to Resolve Dependency (종속성 해결 불가)

두 번째는 종속성을 해결할 수 없는 문제입니다. 최신 버전의 패키지가 필요하지만 이전 버전을 사용하고 있어 버전 충돌이 있을 때 발생합니다.

 해당 문제는 단순히 아래에 서술될 패키지를 찾을 수 없을 때 문제를 해결하는 방식으로 해결할 수 없습니다. 발생하는 오류 문구를 잘 살펴보고 예를 들어, A 패키지와 B 패키지가 있는 경우 서로 종속성 문제가 없는지, 충돌되는 부분이 없는지 확인하여 하나씩 풀어나가야 합니다. A패키지와 B패키지 모두 같은 NuGet 패키지를 사용하고 있지만 A 패키지를 업데이트할 때 공통되는 NuGet의 패키지 버전을 올리려고 하면 B 패키지에서 하위 버전을 사용 중이기 때문에 업데이트를 할 수 없는 상태인 거죠.

Detected package downgrade: 'PackageB' from 4.0.0 to 3.5.0. Reference the package directly from the project to select a different version.
  
'Project' -> 'PackageA' 4.0.0 -> 'PackageB' (>= 4.0.0)
  
'Project' -> 'PackageB' (>= 3.5.0)

https://learn.microsoft.com/en-us/nuget/reference/errors-and-warnings/nu1605

 

NuGet Warning NU1605

NU1605 warning code

learn.microsoft.com

 

Package Restore Failed (패키지 복원 실패)

세 번째는 패키지 복원 실패입니다. 네트워크 문제가 있거나 잘못된 구성으로 NuGet이 패키지 소스에 연결할 수 없을 때 발생합니다.

NU1301: Unable to load the service index for source [SourceName]. The package source [SourceName] might be offline or unreachable.

https://learn.microsoft.com/ko-kr/nuget/reference/errors-and-warnings/nu1301

 

NuGet 오류 NU1301

NU1301 오류 코드

learn.microsoft.com

 

 현재 사내 NuGet 패키지를 Github Private Repository를 이용해 Github Packages에 게시하여 팀원들과 사용하고 있는데요. 여느 때와 같이 내부에서 쓰이는 패키지 상위 버전이 출시되어 업데이트를 하고자 하였으나 위 오류들 중 NU1101이 발생하여 패키지 업데이트를 할 수 없는 문제가 있었습니다. 그래서 다음과 같은 순서로 이 문제를 해결하기 위한 시도를 해보았습니다.

 

bin 폴더 및 obj 폴더 삭제

 

 프로젝트 디렉터리에 존재하는 bin 폴더와 obj 폴더를 삭제합니다. obj 폴더에는 컴파일 단계에서 소스코드가 컴파일된 바이너리 코드 파일로 변경되어 생성되고, bin 폴더에는 컴파일 단계에서 컴파일된 코드 파일들이 링킹 되어 하나의 Dll 또는 EXE 파일로 생성됩니다.

 해당 파일들이 손상되거나 오래되어 업데이트 시 문제가 있을 수 있고  obj 폴더에는 캐시 된 메타데이터와 중간 상태가 포함되어 있어 최신 패키지 업데이트를 반영하지 못할 수 있습니다.

 

중간 파일에는 개체 파일 (. obj), 소스 파일 (. g.cs), 어셈블리 메타데이터, 임시 파일 (임시 구성, 컴파일된 리소스 파일 등) 등이 포함됩니다.

 

 

Global NuGet 캐시 삭제

 

 

 %userprofile%\.nuget\packages 경로에서 현재 사용 중인 버전을 제외한 문제가 있는 패키지 폴더를 삭제합니다.

Global NuGet 캐시가 손상되어 불완전한 패키지 파일이 존재할 수 있어 문제가 있는 특정 패키지 삭제 후 새로 다운로드할 수 있도록 합니다.

https://learn.microsoft.com/en-us/nuget/consume-packages/managing-the-global-packages-and-cache-folders

 

How to manage the global packages, cache, temp folders in NuGet

How to manage the global package installation folder, the package cache, and the temp folders that exist on a computer, which are used when installing, restoring, and updating packages.

learn.microsoft.com

 

Clean and Rebuild the Project

 위의 과정들을 거친 후 Visual Studio에서 Build → Clean Solution, Build → Rebuild Solution을 선택하여 프로젝트를 깨끗하게 재빌드합니다.

 

추가적으로 NuGet 패키지 소스가 정확하게 추가되어 있는지 확인해야 합니다. NuGet Package Manager에서 Package source가 올바르게 추가되어 있는지 확인합니다.

 

 정리하자면 프로젝트의 bin 폴더와 obj 폴더, Global NuGet Package의 특정 파일이 손상이 있을 수 있어 삭제 후 재빌드하여 문제를 해결합니다.

댓글