KeiStory

NuGet 패키지 소스 매핑으로 패키지 설치 오류 해결하기

 

NuGet 패키지를 사용할 때 서로 다른 리소스를 통해 패키지를 설치해야 할 경우가 있습니다. 

특히, 내부 저장소를 활용하면서 배포처가 다를 때 패키지 소스 충돌로 인한 오류가 발생할 수 있습니다. 

packageSourceMapping을 활용해 이러한 문제를 해결하는 방법을 소개합니다.

 

일반적인 설정

내부 저장소를 사용 중이며, 서로 다른 배포처에서 패키지를 설치해야 하는 상황입니다.

testa 패키지: A 리소스(http://a.com/index.json)
testb 패키지: B 리소스(https://b.com/packages/)

일반적으로 NuGet 설정은 아래와 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear />
    <add key="A" value="http://a.com/index.json"  allowInsecureConnections="true"/>
    <add key="B" value="https://b.com/packages/" />
  </packageSources>
</configuration>

testa package : A / testb package : B

위 처럼 하게되면 CI 시 A package 가 설치될때 B 패키지 리소스에서 찾게되어 에러가 발생됩니다.

 

해결방법

이럴때는 packageSourceMapping 을 이용해 패키지 리소스와 패키지를 매핑시켜줍니다.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear />
    <add key="A" value="http://a.com/index.json"  allowInsecureConnections="true"/>
    <add key="B" value="https://b.com/packages/" />
  </packageSources>

  <packageSourceMapping>
    <packageSource key="A">
      <package pattern="*" />
    </packageSource>
    <packageSource key="B">
      <package pattern="testb" />
      <package pattern="testb.*" />
    </packageSource>
  </packageSourceMapping>
</configuration>

위처럼 설정하게되면 testb 패키지와 testb. 으로 시작하는 패키지 들은 모두 B 패키지 리소스에서 다운받고

그외의 패키지 같은 경우 A 패키지 리소스에서 찾게됩니다.

 

결론

서로 다른 배포처에서 패키지를 설치할 때 packageSourceMapping을 사용하면 패키지와 리소스를 명확하게 매핑할 수 있습니다. 이를 통해 패키지 설치 시 리소스 충돌로 인한 오류를 방지할 수 있습니다.

* 보안상 HTTP 리소스를 사용할 경우 allowInsecureConnections="true" 설정을 추가해야 합니다.

반응형

'코딩 > C#' 카테고리의 다른 글

CSnakes.Runtime 을 로컬 파이썬/VM 이용하기  (0) 2025.01.25
CSnakes.Runtime 사용하기  (0) 2025.01.22
LM-Kit.NET 활용하기  (0) 2024.10.27
C# 키보드 후킹하기  (0) 2024.10.21
C# RabbitMQ Management 실행하기  (0) 2024.10.14

공유하기

facebook twitter kakaoTalk kakaostory naver band