programing

NuGet의 패키지 위치를 변경할 수 있습니까?

newsource 2023. 5. 5. 09:45

NuGet의 패키지 위치를 변경할 수 있습니까?

저는 대부분의 프로젝트에 대해 다음과 같은 규약을 가지고 있습니다.

/src
    /Solution.sln
    /SolutionFolder
        /Project1
        /Project2
        /etc..
/lib
    /Moq
        moq.dll
        license.txt
    /Yui-Compressor
        yui.compressor.dll
/tools
    /ILMerge
        ilmerge.exe

소스 폴더 내에 외부 라이브러리를 보관하지 않습니다.또한 NuGet 사용에 관심이 많지만 이러한 외부 라이브러리가 소스 폴더에 포함되는 것을 원하지 않습니다.NuGet에는 모든 패키지가 로드되는 디렉터리를 변경하는 설정이 있습니까?

이제 패키지가 설치되는 폴더를 제어할 수 있습니다.

http://nuget.codeplex.com/workitem/215

편집: 2010년 12월 10일 오후 11시 45분 필 하크의 코멘트를 참조하십시오(작업 항목/위 링크).이 지원은 1.0에서 부분적으로 구현되었지만 문서화되지 않았습니다.

@dfowler에 따르면:다음을 사용하여 솔루션 옆에 nuget.config 파일을 추가합니다.

<settings>
<repositoryPath>{some path here}</repositoryPath>
</settings>

패키지 폴더 재정의를 만들기 위한 뉘트 패키지가 있습니다.

버전 2.1 업데이트

아자트가 언급했듯이 패키지 위치를 제어하는 방법에 대한 공식 문서가 있습니다.2.1의 릴리스 정보는 nuget.config 파일에 다음과 같은 구성을 지정합니다(구성 파일을 저장할 수 있는 유효한 위치와 계층적 구성 모델의 작동 방식에 대한 설명은 릴리스 정보를 참조하십시오).

<configuration>
  <config>
    <add key="repositoryPath" value="C:\thePathToMyPackagesFolder" />
  </config>
  ... 
</configuration>

이렇게 하면 파일을 저장한 구성 수준의 패키지 폴더가 변경됩니다(솔루션 디렉터리, 프로젝트 디렉터리 등에 저장한 경우).릴리스 노트에는 다음이 명시되어 있습니다.

[...] 솔루션 루트 아래에 기존 패키지 폴더가 있는 경우 NuGet이 패키지를 새 위치에 배치하기 전에 해당 폴더를 삭제해야 합니다.

  1. nuget.config라는 파일을 만들었습니다.
  2. 해당 파일을 내 솔루션 폴더에 추가했습니다.

이것은 나에게 효과가 없었습니다.

<configuration>
  <config>
    <add key="repositoryPath" value="..\ExtLibs\Packages" />
  </config>
  ... 
</configuration>

이것은 나에게 효과가 있었습니다.

<?xml version="1.0" encoding="utf-8"?>
<settings>
  <repositoryPath>..\ExtLibs\Packages</repositoryPath>
</settings>

이 게시물을 읽는 다른 사람들을 위해 알겠습니다 - 위의 무수히 많은 답변에 대해 제가 이해하는 것은 다음과 같습니다.

  1. .nuget 폴더의 nuget.config 파일은 해당 폴더에 상대적입니다.새 폴더가 '...와 같은 경우에는 이 작업이 중요합니다./패키지'는 항상 상자 밖으로 나가는 곳에 저장합니다.@bruce14가 말하는 것처럼 당신은 '../../Packages' 대신

  2. 패키지 복원을 실행하지 않고는 표준 위치 외부에서 패키지 폴더를 찾기 위해 최신 Nugget(2.8.5)을 가져올 수 없습니다.따라서 패키지 복원을 사용하도록 설정한 후 다음을 .nuget 폴더 내부의 nuget.config 파일에 추가하여 위치를 변경해야 합니다.

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      ...
      <config>
        <add key="repositoryPath" value="..\..\Packages" />
      </config>
      ...
    </configuration>
    
  3. (중요) nuget.config 파일 내의 패키지 폴더 위치를 변경하는 경우 변경 내용을 적용하려면 Visual Studio를 다시 시작하거나 솔루션을 닫거나 다시 로드해야 합니다.

Visual Studio 2015의 Nuget 3.2 솔루션은 다음과 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <config>
        <add key="repositoryPath" value="../lib" />
    </config>
</configuration>

상위 폴더에 슬래시를 사용하고 있습니다.솔루션 폴더에 위의 파일(nuget.config)을 저장합니다.

여기에서 참조할 수 있습니다.

2.1 릴리즈 노트에서 제안한 솔루션은 즉시 사용할 수 없습니다.그들은 코드가 있다는 것을 언급하는 것을 잊었습니다.

internal string ResolveInstallPath()
{
    if (!string.IsNullOrEmpty(this.OutputDirectory))
    {
        return this.OutputDirectory;
    }
    ISettings settings = this._configSettings;

    ...
}

작동을 방해합니다.이 문제를 해결하려면 NuGet.targets 파일을 수정하고 'OutputDirectory' 매개 변수를 제거해야 합니다.

    <RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)"  $(RequireConsentSwitch)</RestoreCommand>

이제 NuGet.config 어딘가에 'repositoryPath' 구성을 추가하면(구성 파일을 저장할 유효한 위치에 대한 설명은 릴리스 노트 참조) 모든 패키지가 단일 위치로 복원되지만....csproj에는 상대 경로로 작성된 어셈블리에 대한 힌트가 여전히 포함되어 있습니다...

PackagesDir에 관련된 힌트 경로를 추가하도록 PackagesManager를 변경하는 대신 왜 어렵게 진행했는지 아직도 이해할 수 없습니다.이렇게 수동으로 패키지 위치를 로컬(데스크톱)과 빌드 에이전트에 다르게 지정할 수 있습니다.

<Reference Include="Autofac.Configuration, Version=2.6.3.862, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
  <Private>True</Private>
  <HintPath>$(PackagesDir)\Autofac.2.6.3.862\lib\NET40\Autofac.Configuration.dll</HintPath>
</Reference>

하려면 packages.config를 사용해야 .globalPackagesFolder

출처: https://learn.microsoft.com/en-us/nuget/reference/nuget-config-file

글로벌 패키지폴더(PackageReference만 사용하는 프로젝트)

기본 전역 패키지 폴더의 위치입니다.기본값은 %userprofile%입니다.nuget\packages(윈도우즈) 또는 ~/.nuget/패키지(Mac/Linux)입니다.상대 경로는 프로젝트별 nuget.config 파일에서 사용할 수 있습니다.이 설정은 NUGET_PACKAGES 환경 변수에 의해 재정의되며, NUGET_PACKAGES 환경 변수가 우선합니다.

repositoryPath(packages.config 전용)

기본 $(Solutiondir)/packages 폴더 대신 NuGet 패키지를 설치할 위치.상대 경로는 프로젝트별 nuget.config 파일에서 사용할 수 있습니다.이 설정은 NUGET_PACKAGES 환경 변수에 의해 재정의되며, NUGET_PACKAGES 환경 변수가 우선합니다.

<config>
    <add key="globalPackagesFolder" value="c:\packageReferences" />
    <add key="repositoryPath" value="c:\packagesConfig" />
</config>

솔루션 파일 옆에 Nuget.config를 놓았더니 작동했습니다.

Shane Kms 응답 외에도 Nuget Package Restore를 활성화한 경우 다음과 같이 .nuget 폴더에 있는 NuGet.config를 편집합니다.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <repositoryPath>..\..\ExtLibs\Packages</repositoryPath>
</configuration>

여분의 "..솔루션 폴더가 아닌 .nuget 폴더에서 역추적합니다.

일부 팁이 누락되었기 때문에 이 답변 중 어떤 것도 저에게 효과가 없었습니다(Nuget 2.8.6). 다른 사람들에게 유용할 수 있기 때문에 여기에 추가하려고 할 것입니다.

출처를 후: 다음소스읽후은를:
https://docs.nuget.org/consume/://docs.nuget.org/consume/NuGet-Config-Settings
https://github.com/NuGet/Home/issues/://github.com/NuGet/Home/issues/1346
다는니습는다.

  1. 다른 저장소 경로로 올바르게 작동하는 Install-Package를 만들려면 슬래시를 사용해야 합니다. URI 개체를 사용하여 위치를 구문 분석하고 있기 때문입니다.
  2. 처음에 $가 없으면 여전히 내 설정을 무시하고 있었습니다.
  3. NuGet은 구성 파일을 캐시하므로 수정 후 솔루션/VS를 다시 로드해야 합니다.
  4. 또한 이 옵션을 설정하기 위해 NuGet.exe 명령을 사용하는 동안 AppData\Roaming\NuGet에서 글로벌 NuGet.exe를 수정하고 패키지를 복원하기 시작했기 때문에 이상한 문제가 발생했습니다(해당 파일의 우선 순위가 더 높기 때문에 추측하기만 하면 됩니다).

예.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
  <config>
    <add key="repositorypath" value="$/../../../Common/packages" />
  </config>
</configuration>

또한 NuGet 명령을 사용하여 구문이 다음과 같이 정확한지 확인할 수 있습니다.

NuGet.exe config -Set repositoryPath=$/../../../Common/packages -ConfigFile NuGet.Config

Visual Studio 2019 및 Nuget 5.9.*

  1. %AppData%\를 엽니다.NuGet 폴더에서 기존 NuGet을 엽니다.구성 파일.repositoryPath 키를 편집하고 새 대상을 설정합니다.
 <config>
  <add key="repositoryPath" value="D:\.nuget\packages" />
  </config>
  1. 환경 변수에서 시스템 변수 NUGET_PACKAGES를 편집하고 새 대상을 설정합니다.

여기에 이미지 설명 입력

  1. VS를 다시 시작합니다.모든 솔루션에 nuget.config 파일을 넣을 필요가 없습니다.

.NET Core 프로젝트 및 Visual Studio 2017의 경우 다음 구성을 제공하여 모든 패키지를 상대 경로로 복원할 수 있었습니다.

<configuration>
  <config>
    <add key="globalPackagesFolder" value="lib" />
  </config>
  ... 
</configuration>

내 경험에 따르면 lib 폴더는 sln 파일이 어디에 있든 Nuget.config가 발견된 동일한 수준에서 생성되었습니다.테스트한 결과 명령줄 닷넷 복원 및 Visual Studio 2017 재구축에 대한 동작이 동일합니다.

승인된 답변의 구성 파일은 VS2012에서 사용할 수 있습니다.그러나 다음 작업을 수행할 때만 작동합니다.

  1. VS에서 새 프로젝트를 만듭니다.
  2. VS 종료 - 이것은 중요한 것 같습니다.
  3. 구성 파일을 프로젝트 폴더에 복사합니다.
  4. VS를 다시 시작하고 패키지를 추가합니다.

이러한 단계를 수행하면 공유 패키지 폴더를 사용할 수 있습니다.

제가 방금 발견한 또 하나의 작은 소식입니다.(이것은 너무 기본적이어서 일부에서는 언급하지 않았지만 제 솔루션에 중요했습니다.)"packages" 폴더는 .sln 파일과 동일한 폴더에 있게 됩니다.

우리는 우리의 .sln 파일을 옮긴 다음 내부의 모든 경로를 수정하여 다양한 프로젝트와 voila를 찾았습니다!우리의 패키지 폴더는 우리가 원하는 곳에 도착했습니다.

VS 2017 업데이트:

Nuget 팀의 사람들은 마침내 Nuget을 사용하기 시작했고, 이것은 그들이 몇 가지 중요한 것을 찾고 고치는 데 도움이 되었습니다.이제(VS 2017로 마이그레이션되지 않은 것처럼) 아래의 내용은 더 이상 필요하지 않습니다."repositoryPath"를 로컬 폴더로 설정할 수 있어야 작동합니다.기본적으로 복원 위치가 솔루션 폴더에서 시스템 수준으로 이동된 것처럼 그대로 둘 수도 있습니다.다시 - 아직도 혼자 테스트하지 않았습니다.

VS 2015 및 이전 버전

다른 답변에 대한 팁(특히 이 내용):

NuGet Package 폴더의 위치는 구성을 통해 변경할 수 있지만 Visual Studio는 여전히 이 폴더의 어셈블리를 상대적으로 참조합니다.

<HintPath>..\..\..\..\..\..\SomeAssembly\lib\net45\SomeAssembly.dll</HintPath>

이 문제를 해결하기 위해 (더 나은 솔루션이 나올 때까지) 하위 명령을 사용하여 패키지 폴더의 새 위치를 가리키는 가상 드라이브를 만들었습니다.

subst N: C:\Development\NuGet\Packages

이제 새로운 NuGet 패키지를 추가할 때 프로젝트 참조는 절대 위치를 사용합니다.

<HintPath>N:\SomeAssembly\lib\net45\SomeAssembly.dll</HintPath>

참고:

  1. 이러한 가상 드라이브는 다시 시작한 후 삭제되므로 처리해야 합니다.
  2. 프로젝트 파일의 기존 참조를 바꾸는 것을 잊지 마십시오.

가장 일관된 방법은 다음과 같습니다.nuget config구성을 명시적으로 설정합니다.

nuget config -set repositoryPath=c:\packages -configfile c:\my.config

https://learn.microsoft.com/en-us/nuget/consume-packages/configuring-nuget-behavior#changing-config-settings

Nuget 2.8.3으로 업데이트 중입니다.설치된 패키지의 위치를 변경하기 위해 오른쪽 클릭 솔루션에서 패키지 복원을 실행했습니다.편집된 NuGet.다음 행을 구성하고 추가합니다.

  <config>
    <add key="repositorypath" value="..\Core\Packages" />
  </config>

그런 다음 솔루션을 다시 빌드하여 모든 패키지를 원하는 폴더에 다운로드하고 참조를 자동으로 업데이트했습니다.

  1. 를 작성nuget.config솔루션 파일이 있는 동일한 디렉터리에 다음 내용이 포함되어 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="repositoryPath" value="packages" />
  </config>
</configuration>

'packages'모든 패키지가 복원되는 폴더가 됩니다.

  1. Visual Studio 솔루션을 닫았다가 다시 엽니다.

Visual Studio 2019 및 NuGet 버전 4 이상을 사용하는 경우 NuGet.config 파일을 편집하여 경로를 변경할 수 있습니다.

NuGet.config 파일은 C:\Users%USER_NAME%\AppData\로밍\NuGet

"글로벌 패키지" 추가구성 파일에 대한 Folder(폴더) 및 repositoryPath(리포지토리 경로) 키.원하는 값을 설정합니다.

여기 예가 있어요.

<?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="Microsoft Visual Studio Offline Packages" value="C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\" />
  </packageSources>
  <config>
    <add key="globalPackagesFolder" value="E:\.packages" />
    <add key="repositoryPath" value="E:\.nuget" />
  </config>
</configuration>

Visual Studio 2019 및 NuGet v4 이상을 사용하면서 머신 레벨 또는 사용자 레벨 구성을 변경하지 않고 절대 경로를 사용하지 않는 솔루션을 찾고 있었습니다.

NuGet 설명서에 따르면 현재 폴더(예: 솔루션 폴더) 또는 드라이브 루트까지의 모든 폴더에 배치된 nuget.config 파일로 이 값을 재정의할 수 있습니다.NuGet 3.3 이전 버전에서는 nuget.config 파일이 .nuget 하위 폴더에 배치될 것으로 예상했습니다.처음에는 이전 버전을 대상으로 설정했기 때문에 이 하위 폴더를 삭제했습니다.

결국 여러 VS 솔루션의 하위 폴더가 포함된 Dev 폴더에 nuget.config 파일이 저장되었습니다.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="repositoryPath" value=".\installed_packages" />
    <add key="globalPackagesFolder" value=".\installed_packages" />
  </config>
</configuration>

이 설정을 사용하면 내 Dev 폴더 아래의 모든 솔루션/프로젝트가 nuget.config 파일과 동일한 수준에 있는 installed_packages라는 폴더에 패키지를 설치합니다.

마지막으로 repositoryPath는 package.config를 사용하는 프로젝트에서 사용되는 반면 globalPackages는폴더는 PackageReference를 사용하는 프로젝트에서 사용됩니다.

다음 내용이 포함된 솔루션 파일이 있는 디렉터리에 nuget.config 파일을 생성하고 Visual Studio를 다시 시작합니다.(VS2022로 테스트) [/packages - 패키지 경로로 바꾸기]

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <settings>
  <repositoryPath>./packages</repositoryPath>
 </settings>
</configuration>



    

언급URL : https://stackoverflow.com/questions/4092759/is-it-possible-to-change-the-location-of-packages-for-nuget