NuGet 패키지 복원을 사용하여 패키지 복원
NuGet 패키지 복원은 프로젝트 파일 또는 packages.config 파일에 나열된 프로젝트의 모든 종속성을 복원합니다. 또는 Visual Studio를 통해 수동으로 nuget restore
dotnet restore
msbuild -t:restore
패키지를 복원할 수 있습니다. dotnet build
및 dotnet run
명령은 패키지를 자동으로 복원하고 프로젝트를 빌드할 때 패키지를 자동으로 복원하도록 Visual Studio를 구성할 수 있습니다.
패키지 복원은 클린 개발 환경을 승격하고 리포지토리 크기를 줄이기 위해 소스 제어에 저장하지 않고도 프로젝트의 모든 종속성을 사용할 수 있도록 합니다. 패키지 이진 파일을 제외하도록 소스 제어 리포지토리를 구성하려면 패키지 및 소스 제어를 참조하세요.
패키지 복원 동작
패키지 복원은 프로젝트 파일(예: .csproj) 또는 <package>
packages.config 파일의 s와 일치하는 <PackageReference>
상태로 모든 패키지 종속성을 설치하려고 시도합니다. 패키지 복원은 먼저 필요에 따라 프로젝트의 직접 종속성을 설치한 다음, 전체 종속성 그래프에서 해당 패키지의 종속성을 설치합니다.
필요한 패키지가 아직 설치되어 있지 않은 경우 NuGet은 먼저 로컬 전역 패키지 또는 HTTP 캐시 폴더에서 해당 패키지를 검색하려고 시도합니다. 패키지가 로컬 폴더에 없는 경우 NuGet은 Visual Studio의 도구>옵션>NuGet 패키지 관리자>Package 원본에 구성된 모든 원본에서 다운로드하려고 시도합니다.
복원하는 동안 NuGet은 패키지 원본의 순서를 무시하고 요청에 응답하는 첫 번째 원본의 패키지를 사용합니다. 복원이 실패하면 NuGet은 모든 원본을 검사 때까지 오류를 나타내지 않습니다. 그런 다음 NuGet은 목록의 마지막 원본에 대해서만 오류를 보고합니다. 이 오류는 패키지가 다른 오류를 개별적으로 나열하지 않더라도 원본에 없는 것을 의미합니다.
NuGet 동작에 대한 자세한 내용은 일반적인 NuGet 구성을 참조 하세요.
패키지 복원
프로젝트 파일 또는 packages.config 파일의 패키지 참조가 올바른 경우 원하는 도구를 사용하여 패키지를 복원합니다.
복원이 성공한 후:
- 사용하는
<PackageReference>
프로젝트의 경우 패키지가 로컬 global-packages 폴더에 있고 프로젝트 obj/project.assets.json 파일이 다시 만들어집니다. - packages.config를 사용하는 프로젝트의 경우 패키지가 프로젝트의 패키지 폴더에 표시됩니다.
- 이제 프로젝트가 성공적으로 빌드됩니다.
프로젝트 파일 또는 packages.config 파일의 패키지 참조가 올바르지 않고 원하는 상태와 일치하지 않는 경우 패키지 복원을 사용하는 대신 올바른 패키지를 설치하거나 업데이트합니다.
패키지 복원을 실행한 후 누락된 패키지 또는 패키지 관련 오류가 있는 경우(예: 솔루션 탐색기 오류 아이콘) 패키지 복원 오류 문제 해결의 지침을 따르거나 패키지를 다시 설치하거나 업데이트합니다. Visual Studio에서 패키지 관리자 콘솔은 패키지를 다시 설치하기 위한 몇 가지 옵션을 제공합니다. 자세한 내용은 패키지 업데이트 사용을 참조하세요.
Visual Studio에서 패키지 복원
Windows의 Visual Studio에서 패키지를 자동으로 또는 수동으로 복원할 수 있습니다. 먼저 도구>옵션>NuGet 패키지 관리자 통해 패키지 복원을 구성합니다.
Visual Studio 패키지 복원 옵션 구성
도구>옵션>NuGet 패키지 관리자>General에서 다음 패키지 복원 옵션을 구성합니다.
NuGet에서 누락된 패키지를 다운로드하도록 허용
NuGet에서 누락된 패키지를 다운로드하여 패키지 복원 및 NuGet 패키지 복원 명령을 사용하도록 허용을 선택합니다. 이 선택 항목은 전역 NuGet.Config 파일의 packageRestore 섹션( Windows의 %AppData%\Roaming\NuGet 또는 Mac 또는 Linux의 ~/.nuget/NuGet/)에 설정을 True
설정합니다packageRestore/enabled
.
<configuration>
<packageRestore>
<add key="enabled" value="True" />
</packageRestore>
</configuration>
참고 항목
설정을 전역적으로 재정의 packageRestore/enabled
하려면 Visual Studio를 열거나 빌드를 시작하기 전에 환경 변수 EnableNuGetPackageRestore 를 True 또는 False로 설정할 수 있습니다.
컴퓨터의 모든 사용자에 대해 패키지 복원을 사용하거나 사용하지 않도록 설정하려면 Windows의 전역 NuGet.Config 파일(%ProgramData%\NuGet\Config), 특정< IDE>\Version>\<<SKU> Visual Studio 폴더 또는 ~/.local/share의 Mac/Linux에 구성 설정을 추가할 수 있습니다. 개별 사용자는 프로젝트 수준에서 필요에 따라 선택적으로 복원을 사용하도록 설정할 수 있습니다. NuGet에서 여러 구성 파일의 우선순위를 지정하는 방법에 대한 자세한 내용은 일반적인 NuGet 구성을 참조하세요.
Important
NuGet.Config에서 설정을 직접 편집 packageRestore
하는 경우 옵션에 현재 값이 표시되도록 Visual Studio를 다시 시작합니다.
빌드하는 동안 누락된 패키지에 대해 자동으로 검사
Visual Studio에서 빌드하는 동안 누락된 패키지에 대해 자동으로 검사 선택하여 Visual Studio에서 빌드를 실행할 때 누락된 패키지를 자동으로 복원합니다. 이 설정은 MSBuild 명령줄에서 실행되는 빌드에 영향을 주지 않습니다. 이 선택 영역은 packageRestore/automatic
NuGet.Config 파일의 섹션에서 설정을 True
packageRestore
설정합니다.
<configuration>
<packageRestore>
<add key="automatic" value="True" />
</packageRestore>
</configuration>
SDK 스타일이 아닌 프로젝트의 경우 Visual Studio in Options에서 빌드하는 동안 누락된 패키지에 대해 자동으로 검사 누락된 패키지를 다운로드하도록 NuGet 허용을 선택하여 자동 복원을 사용하도록 설정해야 합니다.
기본 패키지 관리 형식 선택
NuGet에는 PackageReference 및 packages.config의 두 가지 패키지 관리 형식이 있습니다. 패키지 관리 아래의 드롭다운 목록에서 사용할 형식을 선택합니다. 첫 번째 패키지 설치 시 서식 선택을 허용할지 여부를 선택할 수도 있습니다.
참고 항목
프로젝트에서 두 패키지 관리 형식을 모두 지원하지 않는 경우 NuGet은 프로젝트와 호환되는 패키지 관리 형식을 사용합니다. 이 형식은 옵션에서 설정한 기본값이 아닐 수 있습니다. 그런 다음 NuGet은 해당 옵션을 선택한 경우에도 처음 설치 시 선택하라는 메시지를 표시하지 않습니다.
패키지 관리자 콘솔을 사용하여 프로젝트에 첫 번째 패키지를 설치하는 경우 옵션에서 해당 옵션을 선택한 경우에도 NuGet에서 서식 선택을 묻는 메시지가 표시되지 않습니다.
수동으로 또는 자동으로 패키지 복원
옵션에서 패키지 복원을 사용하도록 설정한 후 솔루션 탐색기 솔루션을 마우스 오른쪽 단추로 클릭하고 NuGet 패키지 복원을 선택하여 언제든지 패키지를 복원할 수 있습니다.
옵션에서 자동 복원을 사용하도록 설정한 경우 템플릿에서 프로젝트를 만들거나 프로젝트를 빌드할 때 패키지 복원이 자동으로 수행됩니다. NuGet 4.0 이상의 경우 SDK 스타일 프로젝트를 변경할 때도 복원이 자동으로 수행됩니다.
사용하는 <PackageReference>
프로젝트의 경우 Visual Studio 솔루션 탐색기 종속성>패키지에서 패키지 참조를 볼 수 있습니다. 솔루션 탐색기 빌드 표시 오류 아이콘을 수동으로 복원하거나 실행할 때 제대로 설치되지 않는 패키지입니다. 프로젝트를 마우스 오른쪽 단추로 클릭하고, NuGet 패키지 관리를 선택하고, NuGet 패키지 관리자 사용하여 영향을 받는 패키지를 제거하고 다시 설치합니다. 자세한 내용은 패키지 다시 설치 및 업데이트를 참조 하세요.
오류가 표시되면 이 프로젝트는 이 컴퓨터에 누락된 NuGet 패키지를 참조하거나 하나 이상의 NuGet 패키지를 복원해야 하지만 동의가 부여되지 않았기 때문에 복원할 수 없는 경우 자동 복원을 사용하도록 설정했는지 확인합니다. 이전 프로젝트의 경우 자동 패키지 복원으로 마이그레이션을 참조하세요. 또한 패키지 복원 오류 문제 해결을 참조 하세요.
dotnet CLI를 사용하여 복원
dotnet restore 명령은 프로젝트 파일이 나열<PackageReference>
하는 패키지를 복원합니다. 자세한 내용은 프로젝트 파일의 PackageReference를 참조 하세요.
.NET Core 2.0 이상 dotnet build
및 dotnet run
명령은 패키지를 자동으로 복원합니다. NuGet 4.0 dotnet restore
을 기준으로 다음과 같은 코드를 nuget restore
실행합니다.
다음을 사용하여 패키지를 dotnet restore
복원하려면
- 명령줄을 열고 프로젝트 파일이 포함된 디렉터리로 전환합니다.
dotnet restore
를 실행합니다.
Important
누락된 패키지 참조를 프로젝트 파일에 추가하려면 dotnet add package를 사용합니다. 또한 실행됩니다restore
.
NuGet CLI를 사용하여 복원
NuGet CLI 복원 명령은 누락된 패키지를 다운로드하고 설치합니다. 이 명령은 패키지 참조에 PackageReference 또는 packages.config를 사용하는 프로젝트에서 작동합니다.
마찬가지로 install
명령은 디스크에 restore
만 패키지를 추가하지만 프로젝트 파일 또는 packages.config를 수정하지는 않습니다. 프로젝트 종속성을 추가하려면 Visual Studio 패키지 관리자 UI 또는 콘솔을 사용합니다.
패키지를 복원하려면 다음 명령을 실행합니다.
nuget restore <projectPath>
이 restore
명령은 지정된 프로젝트 경로에서 솔루션 파일 또는 package.config 파일을 사용합니다.
예를 들어 현재 디렉터리에서 MySolution.sln 대한 모든 패키지를 복원하려면 다음을 실행합니다.
nuget restore MySolution.sln
참고 항목
사용하는 PackageReference
비 SDK 스타일 프로젝트의 경우 msbuild -t:restore를 사용하여 패키지를 복원합니다.
MSBuild를 사용하여 복원
msbuild -t:restore를 사용하여 Visual Studio 2017 이상에 포함된 NuGet 4.x+ 및 MSBuild 15.1 이상에서 패키지를 복원할 수 있습니다.
이 명령은 패키지 참조에 PackageReference를 사용하는 프로젝트의 패키지를 복원합니다. MSBuild 16.5 이상부터 이 명령은 함께 사용할 -p:RestorePackagesConfig=true
때 packages.config 패키지 참조도 지원합니다.
MSBuild 복원을 사용하려면 다음을 수행합니다.
개발자 명령 프롬프트를 검색하고 MSBuild에 필요한 모든 경로를 구성하는 Windows 시작 메뉴에서 프롬프트를 시작하여 개발자 명령 프롬프트를 엽니다.
프로젝트 폴더로 전환하고 .를 입력합니다
msbuild -t:restore
.복원이 완료되면 프로젝트를 다시 빌드하려면 입력
msbuild
합니다. MSBuild 출력이 빌드가 성공적으로 완료되었음을 나타내는지 확인합니다.
참고 항목
빌드가 기본 대상이므로 프로젝트를 실행하고restore
, 다시 로드하고, 빌드하는 데 사용할 msbuild -restore
수 있습니다. 자세한 내용은 하나의 MSBuild 명령을 사용하여 복원 및 빌드를 참조 하세요.
Azure Pipelines 또는 Azure DevOps Server를 사용하여 복원
Azure Pipelines에서 빌드 정의를 만들 때 빌드 작업 전에 정의에 NuGet CLI 복원 또는 dotnet CLI 복원 작업을 포함할 수 있습니다. 몇 가지 빌드 템플릿에는 기본적으로 복원 작업이 포함되어 있습니다.
TFS 2013 이상 팀 빌드 템플릿을 사용하는 경우 Azure DevOps Server 및 TFS 2013 이상에서는 빌드 중에 패키지를 자동으로 복원합니다. 명령줄 복원 옵션을 실행하거나 필요에 따라 빌드 템플릿을 이후 버전으로 마이그레이션하는 빌드 단계를 포함할 수도 있습니다. 자세한 내용은 Team Foundation 빌드를 사용하여 패키지 복원 설정을 참조하세요.
패키지 버전 제한
모든 메서드를 통한 NuGet 복원은 packages.config 또는 프로젝트 파일에 지정한 버전 제약 조건을 적용합니다.
packages.config에서 종속성에서 범위를 지정할
allowedVersions
수 있습니다. 자세한 내용은 업그레이드 버전에 대한 제약 조건을 참조 하세요. 예시:<package id="Newtonsoft.json" version="6.0.4" allowedVersions="[6,7)" />
프로젝트 파일에서 종속성의 속성에
Version
버전 범위를 지정할 수 있습니다. 예시:<PackageReference Include="Newtonsoft.json" Version="[6,7)" />
두 경우 모두 패키지 버전 관리에서 설명하는 표기법을 사용합니다.
원격 패키지 원본에서 강제 복원
기본적으로 NuGet 복원 작업은 전역 패키지 및 캐시 폴더 관리에 설명된 대로 로컬 global-packages 및 http-cache 폴더의 패키지를 사용합니다. 이러한 로컬 패키지를 사용하지 않도록 하려면 다음 옵션을 사용합니다.
모든 로컬 캐시를 지우려면 다음을 수행합니다.
- Visual Studio의 도구>옵션>NuGet 패키지 관리자>General에서 모든 NuGet 캐시 지우기 단추를 선택합니다.
- dotnet CLI에서 .를 사용합니다
dotnet nuget locals all --clear
. - NuGet CLI에서 .를 사용합니다
nuget locals all -clear
.
global-packages 폴더에서 패키지를 사용하지 않도록 하려면 다음을 수행합니다 .
- 사용하거나
dotnet nuget locals global-packages --clear
을 사용하여nuget locals global-packages -clear
폴더를 지웁다. - NUGET_PACKAGES 환경 변수를 일시적으로 다른 폴더로 설정합니다.
- 또는 packages.config에 대해
PackageReference
repositoryPath
다른 폴더로 설정하는globalPackagesFolder
NuGet.Config 파일을 만듭니다. 자세한 내용은 구성 설정을 참조하세요. - MSBuild에만 속성이 있는 다른 폴더를 지정합니다
RestorePackagesPath
.
HTTP 캐시에서 패키지를 사용하지 않도록 하려면 다음을 수행합니다.
- 사용하거나
dotnet nuget locals http-cache --clear
.를 사용하여nuget locals http-cache -clear
캐시를 지웁 - NUGET_HTTP_CACHE_PATH 환경 변수를 일시적으로 다른 폴더로 설정합니다.
- 의 경우
nuget restore
옵션을 사용하거나dotnet restore
옵션을 사용합니다--no-http-cache
-NoHttpCache
. 이러한 옵션은 Visual Studio 패키지 관리자 또는 콘솔을 통한 복원 작업에 영향을 주지 않습니다.
자동 패키지 복원으로 마이그레이션
이전 버전의 NuGet은 MSBuild 통합 패키지 복원을 지원했습니다. 사용되지 않는 MSBuild 통합 패키지 복원을 사용하는 프로젝트는 자동 패키지 복원으로 마이그레이션해야 합니다.
이러한 프로젝트에는 일반적으로 NuGet.config, nuget.exe 및 NuGet.targets의 세 가지 파일이 있는 .nuget 폴더가 포함됩니다. NuGet.targets 파일을 사용하면 NuGet에서 MSBuild 통합 접근 방식을 사용하므로 제거해야 합니다.
자동 패키지 복원으로 마이그레이션하려면(Visual Studio)
- 자동 패키지 복원을 사용하도록 설정합니다.
- Visual Studio를 닫습니다.
- .nuget/nuget.exe 및 .nuget/NuGet.targets를 삭제합니다.
- 각 프로젝트 파일에 대해 요소를 제거하고
<RestorePackages>
NuGet.targets에 대한 참조를 제거합니다.
자동 패키지 복원을 테스트하려면 다음을 수행합니다.
- 솔루션에서 packages 폴더를 제거합니다.
- Visual Studio에서 해당 솔루션을 열고 빌드를 시작합니다. 자동 패키지 복원은 소스 제어에 추가하지 않고 각 종속성 패키지를 다운로드하고 설치해야 합니다.