패키지를 설치, 업데이트 또는 복원할 때마다 NuGet은 프로젝트 구조 외부의 여러 폴더에서 패키지 및 패키지 정보를 관리합니다.
| 이름 | 위치 |
|---|---|
| global-packages | |
| http-cache |
|
| 임시 | %temp%\NuGetScratch/tmp/NuGetScratch/tmp/NuGetScratch<username> |
| plugins-cache4.8 이상 |
|
비고
NuGet 3.5 이하에서는 packages-cache 대신 %localappdata%\NuGet\Cache를 사용합니다.
NuGet은 일반적으로 캐시 및 전역 패키지 폴더를 사용하여 컴퓨터에 이미 있는 패키지를 다운로드하지 않도록 하여 설치, 업데이트 및 복원 작업의 성능을 향상합니다. 또한 PackageReference를 사용하는 경우 전역 패키지 폴더는 다운로드한 패키지를 프로젝트 폴더 내에 유지하지 않습니다. 이 경우 실수로 소스 제어에 추가될 수 있으며 NuGet이 컴퓨터 스토리지에 미치는 전반적인 영향을 줄일 수 있습니다.
패키지를 검색하라는 메시지가 표시되면 NuGet은 먼저 전역 패키지 폴더를 찾습니다. 정확한 버전의 패키지가 없는 경우 NuGet은 HTTP가 아닌 모든 패키지 원본을 확인합니다. 패키지를 아직 찾을 수 없는 경우, 및 --no-http-cache 명령이나 dotnet.exe 및 -NoHttpCache 명령으로 지정하지 않는 한, NuGet은 nuget.exe에서 패키지를 찾습니다. 패키지가 캐시에 없거나 캐시가 사용되지 않는 경우 NuGet은 HTTP를 통해 패키지를 검색합니다.
자세한 내용은 패키지가 설치되면 어떻게 되나요?를 참조하세요.
글로벌 패키지
Global-packages 폴더는 NuGet이 다운로드한 패키지를 설치하는 위치입니다.
각 패키지는 패키지 식별자 및 버전 번호와 일치하는 하위 폴더로 완전히 확장됩니다.
PackageReference 형식을 사용하는 프로젝트는 항상 이 폴더에서 직접 패키지를 사용합니다.
packages.config사용하는 경우 패키지가 global-packages 폴더에 설치되고 프로젝트의 packages 폴더에 복사됩니다.
글로벌 패키지 디렉터리 정리
더 이상 사용되지 않는 패키지를 제거하려면 전역 패키지 디렉터리를 수동으로 정리해야 합니다.
Visual Studio의 옵션에서 명령 또는 "NuGet 로컬 리소스 지우기" 단추를 사용하여 이 dotnet nuget locals global-packages --clean 작업을 수행할 수 있습니다(해당 dotnet nuget locals all --clear).
전역 패키지 디렉터리를 지운 후 필요한 모든 패키지를 다시 다운로드하려면 프로젝트를 다시 복원해야 합니다.
Visual Studio에서 솔루션을 다시 로드하여 NuGet의 "최신 복원" 캐시를 지우거나 명령줄 복원(예: Visual Studio의 터미널 창 내에서)을 msbuild -t:restore your.sln수행해야 할 수 있습니다.
사용되지 않는 패키지만 정리하려면 2단계 프로세스입니다.
먼저 사용하도록 설정해야 하는 nuget.config 설정 updatePackageLastAccessTime 이 있습니다.
이 설정으로 인해 NuGet은 복원에 사용될 때 각 패키지의 .nupkg.metadata 파일을 업데이트합니다.
복원이 실행되지만 프로젝트가 이미 최신 상태로 간주되면 패키지 타임스탬프가 업데이트 되지 않습니다 .
이 .nupkg.metadata 파일은 복원 또는 설치 중에 패키지를 다운로드하고 추출할 때 NuGet이 만드는 마지막 파일이며, 복원에서 패키지가 성공적으로 추출되었는지 확인하는 데 사용하는 파일입니다.
둘째, 도구를 실행하여 정리를 수행합니다.
updatePackageLastAccessTime 설정을 사용하도록 설정한 후에는 정기적으로 사용하는 모든 패키지에 타임스탬프가 업데이트되었는지 확인하기 위해 며칠을 기다리는 것이 좋습니다.
현재 NuGet은 이 작업을 수행하는 도구 또는 명령을 제공하지 않습니다. GitHub 이슈에 대한 👍 반응을 추가하여 관심을 표현할 수 있습니다. 일부 커뮤니티 구성원은 사용자가 검색할 수 있는 자체 오픈 소스 NuGet 클리너 도구를 만들었습니다.
고유한 정리 도구를 작성할 경우, 다른 패키지 파일이 삭제될 때 .nupkg.metadata 파일도 삭제하는 것이 중요합니다. 그러므로 이 파일을 먼저 삭제할 것을 권장합니다.
그렇지 않으면 패키지를 참조하는 프로젝트에 예기치 않은 동작이 있을 수 있습니다.
.NET 환경에서 정리 도구를 작성할 때, ConcurrencyUtilities.ExecuteWithFileLocked[Async](..)를 활용하여 NuGet.Common 패키지를 사용하고, 삭제하려는 패키지 디렉터리의 전체 nupkg 경로를 키로 전달합니다. 이를 통해, 복원이 동시에 추출을 시도하는 패키지가 삭제되는 것을 방지할 수 있습니다.
NuGet.Configuration 패키지를 사용하여 전역 패키지 디렉터리를 프로그래밍 방식으로 찾을 수 있습니다.
Settings.LoadDefaultSettings(path)을 사용하여 ISettings 인스턴스를 가져옵니다. (경로로 null를 전달하거나, 전역 패키지 디렉터리를 리디렉션하는 nuget.config를 사용하는 솔루션을 다루기 위해 디렉터리를 전달할 수 있습니다.) 그런 다음 SettingsUtility.GetGlobalPackagesFolder(settings)을 사용합니다.
또는 dotnet nuget locals global-packages --list을 자식 프로세스로 실행하고 그 출력을 분석할 수 있습니다.
HTTP 캐시 (http-cache)
NuGet은 각 패키지 원본의 하위 폴더로 구성된 대부분의 NuGet 피드 통신(검색 제외)의 복사본을 캐시합니다. 패키지는 확장되지 않으며 마지막으로 수정된 날짜가 30분보다 오래된 파일은 일반적으로 만료된 것으로 간주됩니다.
온도
NuGet이 다양한 작업 중에 임시 파일을 저장할 수 있는 폴더입니다.
플러그인 캐시
NuGet이 작업 클레임 요청의 결과를 저장하는 폴더입니다. 자세한 내용은 플랫폼 간 플러그 인 참조 를 참조하세요.
폴더 위치 보기
nuget locals 명령을 사용하여 위치를 볼 수 있습니다.
# Display locals for all folders: global-packages, http cache, temp and plugins cache
nuget locals all -list
일반적인 출력(Windows; "user1"은 현재 사용자 이름입니다.
http-cache: C:\Users\user1\AppData\Local\NuGet\v3-cache
global-packages: C:\Users\user1\.nuget\packages\
temp: C:\Users\user1\AppData\Local\Temp\NuGetScratch
plugins-cache: C:\Users\user1\AppData\Local\NuGet\plugins-cache
(package-cache NuGet 2.x에서 사용되며 NuGet 3.5 이하와 함께 나타납니다.)
dotnet nuget locals 명령을 사용하여 폴더 위치를 볼 수도 있습니다.
dotnet nuget locals all --list
일반적인 출력(Mac; "user1"은 현재 사용자 이름입니다.
info : http-cache: /home/user1/.local/share/NuGet/v3-cache
info : global-packages: /home/user1/.nuget/packages/
info : temp: /tmp/NuGetScratch
info : plugins-cache: /home/user1/.local/share/NuGet/plugins-cache
일반적인 출력(Linux; "user1"은 현재 사용자 이름입니다.
info : http-cache: /home/user1/.local/share/NuGet/v3-cache
info : global-packages: /home/user1/.nuget/packages/
info : temp: /tmp/NuGetScratchuser1
info : plugins-cache: /home/user1/.local/share/NuGet/plugins-cache
단일 폴더의 위치를 표시하려면 http-cache, global-packages, temp, plugins-cache을 사용하고, all를 사용하지 마세요.
로컬 폴더 지우기
Command-line
패키지 설치 문제가 발생하거나 원격 갤러리에서 패키지를 설치하려는 경우, locals --clear 옵션(dotnet.exe) 또는 locals -clear 옵션(nuget.exe)을 사용하여 지울 폴더를 명시하거나 all를 사용하여 모든 폴더를 지우세요.
# Clear the 3.x+ cache (use either command)
dotnet nuget locals http-cache --clear
nuget locals http-cache -clear
# Clear the 2.x cache (NuGet CLI 3.5 and earlier only)
nuget locals packages-cache -clear
# Clear the global packages folder (use either command)
dotnet nuget locals global-packages --clear
nuget locals global-packages -clear
# Clear the temporary cache (use either command)
dotnet nuget locals temp --clear
nuget locals temp -clear
# Clear the plugins cache (use either command)
dotnet nuget locals plugins-cache --clear
nuget locals plugins-cache -clear
# Clear all caches (use either command)
dotnet nuget locals all --clear
nuget locals all -clear
현재 Visual Studio에서 열려 있는 프로젝트에서 사용하는 패키지는 전역 패키지 폴더에서 지워지지 않습니다.
비주얼 스튜디오
Visual Studio는 도구 > NuGet 패키지 관리자 패키지 관리자 설정 메뉴 명령 아래에 있는 "NuGet 패키지 관리자>" 옵션의 모든 로컬 폴더 지우기를 지원합니다.
일반 페이지에서 NuGet 로컬 리소스 지우기를 선택합니다. 시작되면 이 작업을 취소할 수 없습니다. 진행률 표시줄이 표시되고 명령의 최종 상태가 포함됩니다.
"패키지 관리자"에서 출력 표시를 선택할 때 출력 창 에는 오류 메시지를 포함하여 지우기 명령에 대한 추가 세부 정보가 표시됩니다.
NuGet 로컬 리소스 지우기
캐시 관리는 현재 패키지 관리자 콘솔을 통해 사용할 수 없습니다.
자세한 내용은 Visual Studio의 NuGet 옵션을 참조하세요.
오류 문제 해결
다음 오류는 nuget locals 또는 dotnet nuget locals을 사용할 때 발생할 수 있습니다.
오류: 다른 프로세스에서 사용 중이거나 로컬 리소스 지우기에 실패했기 때문에 프로세스에서 파일 <패키지>에 액세스할 수 없습니다. 하나 이상의 파일을 삭제할 수 없습니다.
폴더에 있는 하나 이상의 파일이 다른 프로세스에서 사용 중입니다. 예를 들어 Visual Studio 프로젝트는 global-packages 폴더의 패키지를 참조하는 열려 있습니다. 해당 프로세스를 닫고 다시 시도합니다.
오류: 경로 <경로>에 대한 액세스가 거부되었거나 디렉터리가 비어 있지 않습니다.
캐시에서 파일을 삭제할 수 있는 권한이 없습니다. 가능한 경우 폴더 권한을 변경하고 다시 시도합니다. 그렇지 않으면 시스템 관리자에게 문의하세요.
오류: 지정된 경로, 파일 이름 또는 둘 다 너무 깁니다. 정규화된 파일 이름은 260자 미만이어야 하며 디렉터리 이름은 248자 미만이어야 합니다.
폴더 이름을 단축하고 다시 시도하십시오.