developer tip

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

copycodes 2020. 11. 24. 08:06
반응형

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


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


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은 이 패키지 소스가이 공통 폴더에 포함되지 않은 사용할 수 있습니다.


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

The company globally configured their custom private nuget feed for use on all solutions by default, and I wanted to make a "prototype" app using the public nuget feed.

With this (in the directory of that solution), the public nuget feed is available to my specific solution only, while keeping the company's feed the default for all other solutions:

<?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>

The key was to clear all upwards disabled feeds, since they deliberately disabled the public feed in their NuGet.config in %APPDATA%\NuGet.

참고URL : https://stackoverflow.com/questions/33831689/is-there-a-way-to-make-nuget-package-source-settings-per-solution

반응형