Visual Studio: NuGet Package 오프라인 설치 방법

최근 보안이 강화됨에 따라 대부분의 기업내 개발환경에서는 온라인에 접속이 안되는 경우가 많다. 이 런 경우 개발 SDK 를 온라인에서 설치해야 하는데 난감한 경우가 발생한다.

예전 부터 MS에서 제공하는 SDK는 .iso 파일을 받아 설치하면 되었지만 최근 NuGet Pkg 로 배포되는 SDK 는 직접 온라인에서 설치하게 된다.

이러한 경우 필요한 라이브러리를 온라인에서 다운 받아 내부망에서 오프라인으로 설치하는 방법을 소개한다.

  1. 먼저 온라인에서 샘플 프로젝트를 만든다.
  2. 아래와 같이 프로젝트의 ‘참조’ 항목을 선택하고 NuGet Package를 설치한다.
이 이미지는 대체 속성이 비어있습니다. 그 파일 이름은 image.png입니다

필요한 NuGet Package 를 선택하고 설치한다.

  1. Solution file이 저장된 위치에 packages 라는 폴더가 생성된 것이 보인다. 이 폴더에 설치한 NuGet Pkg가 저장된다. 이 폴더를 통채로 압축하여 내부망으로 가져 온다.
  1. 내부망의 작업 PC에 적당한 폴더를 만들고 외부망에서 가져온 NuGet Pkg를 복사한다.
  1. 이제 내부망 PC의 Visual Studio 에서 NuGet Package의 소스 경로를 방금 만들고 복사한 경로를 추가한다.

온라인에서와 같이 프로젝트의 ‘참조’ 를 선택하고 ‘NuGet 패키지 관리’를 선택한 후에 열리는 패키지 관리자에서 우측 상단의 톱니바퀴 모양의 설정 아이콘을 클릭한다.

위에 보이는 것은 초기의 패키지 소스의 내용이다. 여기에 로컬 패키지 소스를 추가한다. 아래 그림의 우상단에서 [+] 아이콘을 누른다.

추가된 ‘Package Source‘ 를 아래와 같이 로컬 소스로 수정한다.

수정 후 확인을 클릭한 후에 패키지 소스를 이제 막 추가한 'Local Package Source' 으로 선택한다.

선택 후 찾아보기 탭을 선택하면 아래와 같이 좀전에 복사한 NuGet Package 가 보인다. 이제 온라인에서와 같이 설치하면 된다.

이렇게 추가하였지만 가끔 이상한 동작을 하는 경우가 있다. 특히 원래 존재하는 NuGet Source를 삭제한 경우에 문제가 되는 경우가 많으므로 초기에 존재하는 NuGet 원본 소스는 삭제하지 않는 것이 좋다.

이제 로컬 NuGet Source로 작업할 때 발생하는 오류에 대한 해결 방법을 소개한다.

  1. 객체 참조가 객체의 인스턴스로 설정되지 않았습니다.” 라는 에러가 발생하는 경우
    이러한 에러는 대부분 NuGet Package Source의 프로토콜 버전에 문제가 있는 경우가 많다. 이 때 아래 파일을 텍스트 편집기로 열고 protocolVersion="3" 이라고 된 부분을 삭제한다. 전체를 삭제하는 것이 아니라 protocolVersion="3" 문자만 삭제한다.

    C:\Users\\AppData\Roaming\NuGet\NuGet.Config

    이 것은 Visual Studio 2015 부터 추가된 것으로 NuGet Source 원본에만 적용된다. Local Source 에서는 삭제한다.
    아래와 같이 표시되면 정상이다.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="Local Package Source" value="C:\_Work\NuGetPackages" />
    <add key="Microsoft Visual Studio Offline Packages" value="C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\" />
  </packageSources>
</configuration>
  1. 컴파일 할 때 패키지가 없다. 라는 메시지가 뜨거나 패키지 업그레이드를 할 때 에러가 발생하는 경우
    이 경우는 Project 에서 이미 등록된 기존 NuGet Package에 대한 기록을 삭제해야 한다. Visual Studio를 종료하고 projectName.vcxproj 파일을 텍스트편집기로 오픈하고 아래와 같이 일부 태그를 삭제한다.
    1. <None Include="packages.config" />‘ 를 찾아서 삭제한다.
    2. <ImportGroup Label="ExtensionTargets">‘ 을 찾아서 해당 섹션을 모두 삭제한다.
    3. <Target Name="EnsureNuGetPackageBuildImports" ...>‘ 을 찾아서 해당 섹션을 모두 삭제한다.

This entry was posted in Window Program and tagged , , , . Bookmark the permalink.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다