Visual Studio에서 NuGet 패키지 다시 설치 및 업데이트

경우에 따라 Visual Studio 프로젝트 내에서 패키지 참조가 중단될 수 있습니다. 동일한 버전의 패키지를 제거하고 다시 설치하면 참조가 작업 순서로 복원되는 경우가 많습니다. 업데이트된 버전을 설치하는 패키지를 업데이트하면 문제가 해결될 수도 있습니다. 이 문서에서는 끊어진 패키지 참조 및 끊어진 프로젝트를 해결하기 위해 NuGet 패키지를 다시 설치하고 업데이트하는 방법을 설명합니다.

참고 항목

이 문서의 지침은 packages.config 관리 형식을 사용하는 프로젝트에만 적용됩니다. PackageReference 프로젝트의 경우 복원 작업은 끊어진 참조를 자동으로 수정합니다.

일반적인 시나리오

Visual Studio 프로젝트에서 손상된 패키지 참조가 발생할 수 있는 몇 가지 일반적인 시나리오는 다음과 같습니다.

시나리오 설명 해결 방법
패키지 복원 후 끊어진 참조 Visual Studio 프로젝트를 열고 NuGet 패키지를 복원하지만 중단된 패키지 참조는 다시 기본. 참조를 수정하려면 각 패키지를 별도로 다시 설치해 보세요.
삭제된 파일로 인한 프로젝트 손상 패키지 파일이 삭제되면 프로젝트가 중단됩니다. NuGet은 패키지에서 추가하는 항목을 삭제하는 것을 방지하지 않습니다. 패키지에서 설치된 콘텐츠를 실수로 수정하고 프로젝트를 중단하기 쉽습니다. 프로젝트를 복원하려면 영향을 받는 패키지를 다시 설치해 보세요.
패키지 업데이트 후 끊어진 프로젝트 패키지 업데이트로 프로젝트가 중단됩니다. 종속성 패키지에 대한 도우미 업데이트는 일반적으로 이러한 유형의 오류를 발생합니다. 종속성의 상태를 이전 작업 순서로 복원하려면 특정 종속 패키지를 다시 설치해 보세요.
프로젝트 대상 또는 업그레이드 후 끊어진 참조 프로젝트 대상 다시 지정 또는 업그레이드 프로세스로 인해 패키지 참조가 손상됩니다. 프로젝트의 대상을 변경하면 NuGet에 빌드 오류가 표시됩니다. 빌드 경고는 다시 설치해야 할 수 있는 패키지를 나열합니다. 또는 프로젝트를 업그레이드한 후 NuGet은 프로젝트 업그레이드 로그에 오류를 표시합니다. 로그 파일에는 다시 설치해야 할 수 있는 패키지가 나열됩니다. 대상 프레임워크의 변경으로 인한 문제를 해결하려면 하나 이상의 패키지를 다시 설치해 보세요.
개발 중인 패키지 변경 내용 패키지 작성자는 변경 내용을 테스트하기 위해 현재 개발 중인 패키지의 동일한 버전을 다시 설치해야 하는 경우가 많습니다. Visual Studio의 NuGet 패키지 관리자 콘솔은 패키지를 업데이트하고 다시 설치하기 위한 유연한 옵션을 제공합니다. 개발 중인 패키지를 다시 설치하려면 이 명령을 사용할 Update-Package -reinstall 수 있습니다.

구현 옵션

NuGet 패키지를 업데이트하고 다시 설치하는 방법에 대한 몇 가지 옵션이 있습니다. 일반적인 방법은 NuGet 패키지 관리자 UI 옵션, NuGet 패키지 관리자 콘솔 및 NuGet(명령줄 인터페이스) CLI를 포함합니다.

패키지 관리자 UI

패키지 관리자 UI는 콘솔 인터페이스 외에도 패키지를 설치, 업데이트 및 제거하는 메뉴 옵션도 제공합니다.

  • 패키지를 업데이트하려면 업데이트 탭을 열고 하나 이상의 패키지를 선택한 다음 업데이트를 선택합니다.

  • 패키지를 다시 설치하려면 먼저 패키지를 제거한 다음 다시 설치합니다. 설치된 탭을 열고 패키지를 선택하고 해당 이름을 기록한 다음 제거를 선택합니다. 찾아보기 탭으로 전환하고 패키지 이름을 검색하고 패키지를 선택한 다음 설치를 선택합니다.

패키지 관리자 콘솔

도구>NuGet 패키지 관리자패키지 관리자 콘솔에서 패키지 관리자> 콘솔에 액세스할 수 있습니다.

  • 패키지를 업데이트하기 위해 패키지 관리자 콘솔에서 Update-Package 명령을 제공합니다.

  • 패키지를 다시 설치하려면 동일한 명령을 매개 변수와 함께 -reinstall 사용할 수 있습니다. 이 방법은 구성과 호환되는 경우 가장 쉬운 옵션입니다.

자세한 내용은 Update-Package 명령패키지 다시 설치 고려 사항 섹션을 참조하세요.

NuGet CLI

NuGet CLI nuget.exe는 모든 NuGet 기능을 제공하는 Windows용 명령줄 유틸리티입니다.

  • 설치된 패키지를 업데이트하려면 명령을 실행합니다 nuget update .

  • 모든 NuGet 패키지를 다시 설치하려면 패키지 폴더를 삭제한 다음 명령을 실행합니다 nuget install .

  • 단일 패키지를 다시 설치하려면 패키지 폴더를 삭제한 다음 명령을 실행 nuget install <id> 합니다. 여기서 <id> 인수는 특정 패키지의 ID입니다.

참고 항목

dotnet CLI경우 동등한 프로시저가 필요하지 않습니다. 명령을 실행할 dotnet restore 때 dotnet CLI는 NuGet을 사용하여 종속성을 확인하고 필요한 NuGet 패키지를 다운로드합니다. 자세한 내용은 dotnet CLI를 사용하여 NuGet 패키지 복원을 참조하세요.

업그레이드 버전에 대한 제약 조건

기본적으로 패키지를 다시 설치하거나 업데이트하는 경우 항상 패키지 원본에서 사용 가능한 최신 버전이 설치됩니다. 그러나 관리 형식을 packages.config 사용하는 프로젝트는 특히 허용되는 NuGet 패키지 버전 범위를 제한할 수 있습니다.

패키지 API의 주요 변경으로 인해 애플리케이션이 패키지 버전 1.x에서만 작동하지만 버전 2.0 이상에서는 작동하지 않는다고 가정합니다. 애플리케이션이 예상대로 작동하도록 하려면 NuGet 패키지 업그레이드를 버전 1.x로만 제한하려고 합니다. 이 제한은 애플리케이션을 손상할 수 있는 실수로 인한 업데이트를 방지하는 데 도움이 됩니다.

제약 조건을 설정하려면 텍스트 편집기 packages.config 에서 파일을 엽니다. 제한하려는 종속성을 찾아 원하는 버전 범위의 allowedVersions 특성을 추가합니다.

다음 예제에서는 특성을 [1,2)다음으로 설정 allowedVersions 하여 버전 1.x로 업데이트를 제한하는 방법을 보여 줍니다.

<?xml version="1.0" encoding="utf-8"?>
<packages>
    <package id="ExamplePackage" version="1.1.0" allowedVersions="[1,2)" />

    <!-- ... -->
</packages>

모든 경우에 패키지 버전 관리에서 설명한 표기법을 사용하세요.

Update-Package 명령

패키지 관리자 콘솔의 Update-Package 명령은 패키지를 다시 설치하고 끊어진 참조를 해결하는 가장 쉬운 방법입니다. 그러나 이 방법은 모든 시나리오에서 사용할 수 있는 것은 아닙니다. 이 명령을 사용하여 설치된 패키지를 업데이트할 수 있지만 초기 설치는 수행할 수 없습니다. 구성에 아직 설치되지 않은 패키지를 업데이트하거나 다시 설치하려고 하면 명령이 오류를 반환합니다. 명령을 사용하기 전에 패키지 다시 설치 고려 사항 섹션을 검토해야 합니다.

PackageReference를 사용하여 프로젝트 또는 솔루션에서 패키지를 업데이트하는 것은 항상 최신 버전의 패키지(시험판 패키지 제외)로 업데이트됩니다. 관리 형식을 packages.config 사용하는 프로젝트는 업그레이드 버전의 제약 조건에 설명된 대로 업그레이드 버전을 제한할 수 있습니다.

다음 섹션에서는 명령 작업에 대한 예제를 제공합니다.

패키지 옵션 다시 설치

다음은 다시 설치를 수행하는 명령의 기본 사용법입니다. 특정 NuGet 패키지를 식별하려면 선택적 -Id 매개 변수를 사용할 수 있습니다.

# Reinstall the package named <package_name>
Update-Package -Id <package_name> –reinstall

Update-Package 명령을 사용하는 것은 패키지를 제거한 다음 동일한 버전이 있는 NuGet 갤러리에서 동일한 패키지를 찾는 것보다 쉽습니다.

패키지 옵션 업데이트

매개 변수가 -reinstall 없는 동일한 명령은 해당하는 경우 패키지를 최신 버전으로 업데이트합니다. 지정된 패키지가 프로젝트에 아직 설치되지 않은 경우 이 명령은 오류를 반환합니다.

# Update the package named <package_name>
Update-Package <package_name>

프로젝트 및 솔루션 옵션

기본적으로 이 명령은 솔루션의 Update-Package 모든 프로젝트에 영향을 줍니다. 작업을 특정 프로젝트로 제한하려면 매개 변수를 -ProjectName 사용합니다. Visual Studio 솔루션 탐색기 표시되는 프로젝트 이름을 제공합니다.

다음 명령은 솔루션의 특정 프로젝트에 대해 NuGet 패키지를 다시 설치합니다. 다시 설치할 특정 NuGet 패키지의 이름이 매개 변수에 <package_name> 제공됩니다.

# Reinstall the package named <package_name> in MyProject only
Update-Package <package_name> -ProjectName MyProject -reinstall

프로젝트의 모든 패키지를 다시 설치하려면 특정 패키지를 지정하지 않고 매개 변수를 사용합니다 -ProjectName . 이 예제와 같이 이 동일한 접근 방식을 따라 프로젝트의 패키지를 업데이트할 수 있습니다.

# Update all packages in MyProject only
Update-Package -ProjectName MyProject

솔루션의 모든 패키지를 업데이트하려면 다른 인수나 매개 변수 없이 명령을 단독으로 사용합니다 Update-Package .

Important

다음 형식의 명령을 신중하게 사용해야 합니다. 명령 프로세스는 모든 업데이트를 수행하는 데 상당한 시간이 걸릴 수 있습니다.

# Update all packages in all projects in the solution
Update-Package 

패키지 다시 설치 고려 사항

이 명령을 사용하여 Update-Package 패키지를 다시 설치하려는 경우 다음 고려 사항을 검토하여 구성 시나리오와의 호환성을 확인합니다.

  • 패키지 및 해당 종속성은 대상 변경된 프로젝트 대상 프레임워크를 지원하지 않을 수 있습니다.
  • 특성이 requireReinstallation 설정 true되면 Visual Studio에서 영향을 받는 패키지에 대한 빌드 경고를 실행합니다.
  • 패키지 및 버전 제약 조건을 다시 설치하면 종속성 버전 호환성 문제가 발생할 수 있습니다.
  • 특정 패키지를 다시 설치하면 종속 패키지가 중단될 수 있습니다.

패키지는 프로젝트 대상 프레임워크를 지원하지 않습니다.

프로젝트 대상 프레임워크의 대상을 다시 지정하는 경우 하나 이상의 패키지가 새 대상 구성을 지원하지 않을 수 있습니다.

일반적으로 명령을 사용하여 패키지를 다시 설치하면 Update-Package –reinstall <package_name> 작동합니다. 이전 대상 프레임워크에 대해 설치된 패키지가 제거되고 프로젝트의 새 대상 프레임워크에 대해 동일한 패키지가 설치됩니다.

경우에 따라 패키지가 새 대상 프레임워크를 지원하지 않을 수 있습니다. 발생할 수 있는 몇 가지 문제는 다음과 같습니다.

  • 패키지가 PCL(이식 가능한 클래스 라이브러리)을 지원하고 프로젝트를 패키지에서 더 이상 지원하지 않는 플랫폼 조합으로 대상을 변경하면 다시 설치한 후 패키지에 대한 참조가 누락될 수 있습니다.

  • 이 문제는 직접 사용하는 패키지 또는 종속성으로 설치된 패키지에 대해 표시될 수 있습니다. 직접 사용하는 패키지는 해당 종속성이 없는 동안 새 대상 프레임워크를 지원할 수 있습니다.

  • 애플리케이션의 대상을 다시 지정한 후 패키지를 다시 설치하면 빌드 또는 런타임 오류가 발생하는 경우 대상 프레임워크를 되돌리기 새 대상 프레임워크를 제대로 지원하는 대체 패키지를 검색해야 할 수 있습니다.

requireReinstallation 특성이 true로 설정

프로젝트 대상 프레임워크의 대상을 변경하거나 NuGet 패키지를 업그레이드한 후 NuGet은 프로젝트의 파일에 특성을 packages.config 추가할 requireReinstallation 수 있습니다. NuGet이 대상을 변경하거나 업그레이드하는 동안 영향을 받는 패키지를 검색하면 영향을 받는 모든 패키지 참조에 대한 특성이 packages.config 파일에 추가 requireReinstallation="true" 됩니다. 따라서 Visual Studio에서 프로젝트의 후속 빌드마다 해당 패키지에 대한 빌드 경고가 발생합니다. 경고는 영향을 받는 패키지를 다시 설치하기 위한 미리 알림으로 표시됩니다.

패키지 종속성 버전 비호환성

Update-Package –reinstall 명령은 설치된 패키지의 동일한 버전과 종속성의 최신 버전을 다시 설치합니다. 버전 비호환성 문제를 해결하려면 버전 범위 제약 조건을 설정하여 구성을 제어할 수 있습니다. NuGet은 제약 조건을 준수하고 문제를 해결하는 데 필요한 경우에만 패키지 종속성을 최신 버전으로 업데이트합니다.

  • 패키지 다시 설치 중에 제약 조건 설정으로 인해 종속성이 이전 버전으로 되돌리기 경우 명령을 사용하여 문제를 Update-Package <dependency_name> 해결할 수 있습니다. 이 명령은 종속 패키지에 영향을 주지 않고 지정된 종속성을 다시 설치합니다.

  • Update-Package –reinstall <packageName> -ignoreDependencies 명령을 사용할 수도 있습니다. 이 옵션은 원래 패키지의 동일한 버전을 다시 설치하지만 종속성을 다시 설치하지는 않습니다. 패키지 종속성을 업데이트하면 구성 상태가 손상될 수 있는 경우 이 방법을 사용합니다.

끊어진 종속 패키지

특정 패키지를 다시 설치하면 다시 설치한 패키지에 따라 설치된 패키지가 업데이트되지 않습니다. 이러한 다른 설치된 패키지의 버전은 동일하게 기본. 따라서 종속성을 다시 설치하면 종속 패키지가 중단될 수 있습니다.