솔루션별로 NuGet 패키지 원본을 설정하는 방법이 있습니까?


84

Visual Studio가 모든 솔루션 대신 솔루션별로 NuGet 패키지 소스 구성을 적용하도록 만드는 방법을 아는 사람이 있습니까? 각각 고유 한 개인 NuGet 리포지토리가있는 여러 프로젝트에서 작업하기 때문에 버전 관리 문제가 계속 발생합니다. 어떤 NuGet 리포지토리가 어떤 프로젝트에 속하는지 계속 기억하고 돌아가서 올바른 프로젝트를 올바른 프로젝트에 적용하는 것은 ***의 고통입니다.


당신이 무슨 뜻인지 확실하지. 모든 솔루션에 대한 너겟 패키지 소스 만 구성 할 수 있습니다. package.config 파일에는 프로젝트에 필요한 너겟 저장소 버전이 포함됩니다. 자동으로 업데이트하지 마십시오. 하고 싶은 일의 예를 들어 주실 수 있습니까?
Shyamal Desai 15.11.20

1
@Shyamal 패키지 자체가 아니라 NuGet 패키지 소스에 대해 이야기하고 있었는데 ... 어떻게하는지 알아 냈습니다.
BenAlabaster 2015

답변:


138

TLDR : 예

NuGet은 Windows 사용자 프로필 수준에서 NuGet.config로 시작하는 패키지 원본의 계층 적 응용 프로그램을 사용하고 솔루션이 포함 된 파일 경로의 루트에서 시작하여 마지막으로 솔루션 파일.

그래서 제가 알아 낸 것은 다음과 같습니다. 도움이되는 Twitterer가 저에게이 문서를 알려준 덕분입니다.

https://docs.nuget.org/consume/nuget-config-file

Visual Studio의 Tools > NuGet Package Manager > Package Manager Settings: Package Sources옵션 에서 NuGet 패키지 소스를 편집하면 해당 변경 사항이 기본적으로 %APPDATA%\NuGet디렉터리 에있는 NuGet.config 파일에 적용됩니다 . 솔루션 별 (또는 솔루션 그룹별로) 이러한 설정을 재정의하려면 솔루션 또는 솔루션 경로를 따라 전략적으로 배치 된 NuGet.config 파일을 추가해야합니다.

NuGet 문서를 읽으면 모든 것이 명확 해집니다. 아래에서 제공하는 솔루션을 사용하면 단일 Visual Studio 솔루션에 대한 구성을 빠르게 지정할 수 있습니다.

  1. % APPDATA % \ NuGet으로 이동하여 NuGet.config의 복사본을 가져옵니다.
  2. 솔루션의 루트 (예 : Application.sln이있는 위치)에 복사본을 덤프합니다.
  3. 이 솔루션과 관련된 NuGet 패키지 원본 만 포함하도록 복사본을 편집하여 사용자 프로필에 적용된 기본값을 재정의합니다 (예 :이 솔루션에 대한 독점 패키지를 포함하지만 다른 프로젝트에 적용해서는 안되는 개인 NuGet 원본). -예 :
<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>

  <activePackageSource>
    <add key="All" value="(Aggregate source)" />
  </activePackageSource>

  <packageSources>

    <!-- Ditch all the Global NuGet package sources we only want a 
         single private NuGet repo for this project -->
    <clear />

    <!-- Add the private NuGet package source for this solution -->
    <add key="My Private NuGet Server" value="http://myprivatenuget.com:8080/nuget" />

  </packageSources>

  <disabledPackageSources>

    <!-- Add any package sources to ignore here using the same keys as 
         defined in the packageSources list above-->

    <!--<add key="nuget.org" value="true" />-->

    <add key="Microsoft and .NET" value="true" />

  </disabledPackageSources>

</configuration>

당신은 구성이 보장, 여러 솔루션에 적용되는 솔루션 폴더가 모두 공통의 디렉토리에 포함되어 있는지 확인하고 공통의 디렉토리에 그 솔루션에 대한 관련 패키지 소스의 NuGet.config을 넣어하려는 경우 해당 프로젝트를위한 모든 솔루션 폴더 때로 믿을 수 't은 이 패키지 소스가이 공통 폴더에 포함되지 않은 사용할 수 있습니다.


31
감사합니다 BenAlabaster. 그냥 간단하게하려면, 당신은 단지 포함하는 파일을 가질 수 있습니다<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="MyCompanyPackageSource" value="\\server\NuGet\MyCompany" /> </packageSources> </configuration>
Rubenisme

13
이러한 변경 사항을 적용하려면 Visual Studio를 닫았다가 다시 열어야 할 수 있습니다. 내 솔루션을 닫으려고 시도했지만 충분하지 않았습니다.
Jess

1
좋은 대답은 예제 구성이 필요한 것으로 줄이면 더 좋을 것입니다. 또한 VS2015로 시도했지만 @Jess의 의견이 더 이상 적용되지 않는 것 같습니다. 솔루션을 다시 열면 새 패키지 소스가 선택되었습니다.
danio

6

BenAlabaster가 제공 하는 훌륭한 답변 에 추가 하고 싶습니다 . 나는 다소 반대 문제가 있었다.

이 회사는 기본적으로 모든 솔루션에서 사용할 수 있도록 사용자 지정 비공개 너겟 피드를 전 세계적으로 구성했으며 공개 너겟 피드를 사용하여 "프로토 타입"앱을 만들고 싶었 습니다 .

이를 통해 (해당 솔루션의 디렉터리에서) 공개 너겟 피드는 내 특정 솔루션에서만 사용할 수 있으며 회사의 피드는 다른 모든 솔루션의 기본값으로 유지합니다.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <!-- Ditch all eventually upwards configured (private) feeds from an (enterprise) environment -->
    <clear />
    <!-- Make sure we use the public nuget -->
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
  </packageSources>
  <packageRestore>
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>
  <bindingRedirects>
    <add key="skip" value="False" />
  </bindingRedirects>
  <disabledPackageSources>
    <!-- Ditch all eventually upwards configured (private) feeds from an (enterprise) environment -->
    <clear />
  </disabledPackageSources>
</configuration>

핵심은 % APPDATA % \ NuGet의 NuGet.config에서 공개 피드를 의도적으로 비활성화했기 때문에 위쪽으로 비활성화 된 모든 피드를 지우는 것이 었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.