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
편집 : Phil Haack의 2010 년 12 월 10 일 11:45 PM (작업 항목 / 위 링크)에 대한 의견을 참조하십시오. 지원은 1.0에서 부분적으로 구현되지만 문서화되어 있지 않습니다.
@dfowler에 따르면 다음과 같이 솔루션 옆에 nuget.config 파일을 추가하십시오.
<settings>
<repositoryPath>{some path here}</repositoryPath>
</settings>
이 nuget 패키지 패키지 폴더 재정의를 만들기위한이.
버전 2.1 업데이트
Azat가 언급했듯이 이제 패키지 위치를 제어하는 방법에 대한 공식 문서가 있습니다. 2.1 의 릴리스 정보 는 nuget.config 파일에 다음 구성을 지정합니다 (구성 파일을 배치 할 유효한 위치 및 계층 적 구성 모델의 작동 방식에 대한 설명은 릴리스 정보를 참조하십시오).
<configuration>
<config>
<add key="repositoryPath" value="C:\thePathToMyPackagesFolder" />
</config>
...
</configuration>
그러면 파일을 넣은 구성 수준에 대한 패키지 폴더가 변경됩니다 (솔루션 디렉토리에 프로젝트를 배치하면 프로젝트 디렉토리에 프로젝트 등). 릴리스 노트 상태는 다음과 같습니다.
[...] 솔루션 루트 아래에 기존 패키지 폴더가있는 경우 NuGet이 패키지를 새 위치에 배치하기 전에 해당 폴더를 삭제해야합니다.
- "nuget.config"라는 파일을 만들었습니다.
- 해당 파일을 솔루션 폴더에 추가했습니다.
이것은 나를 위해 작동하지 않았다 :
<configuration>
<config>
<add key="repositoryPath" value="..\ExtLibs\Packages" />
</config>
...
</configuration>
이것은 나를 위해 일했다 :
<?xml version="1.0" encoding="utf-8"?>
<settings>
<repositoryPath>..\ExtLibs\Packages</repositoryPath>
</settings>
이 게시물을 읽는 다른 사람을 위해 좋습니다. 여기서 위의 수많은 답변에 대해 이해합니다.
.nuget 폴더의 nuget.config 파일은 해당 폴더를 기준 으로합니다. 새 폴더가 '../Packages'와 같은 경우 항상 상자 밖으로 나갈 수 있으므로 중요합니다. @ bruce14가 말했듯이 대신 '../../Packages'를 수행해야합니다.
패키지 복원을 활성화하지 않고 표준 위치 외부에서 패키지 폴더를 찾을 수있는 최신 nuget (2.8.5)을 얻을 수 없습니다. 따라서 패키지 복원을 활성화하면 .nuget 폴더 안에있는 nuget.config 파일에 다음을 추가하여 위치를 변경해야합니다.
<?xml version="1.0" encoding="utf-8"?> <configuration> ... <config> <add key="repositoryPath" value="..\..\Packages" /> </config> ... </configuration>
(중요) 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는 여전히 상대 경로로 작성된 어셈블리에 대한 힌트를 포함합니다 ...
나는 여전히 PackageManager를 변경하는 대신 왜 어려운 일을했는지 이해하지 못하므로 PackagesDir에 상대적인 힌트 경로를 추가합니다. 그것이 로컬 (내 데스크탑)과 빌드 에이전트에서 다른 패키지 위치를 갖기 위해 수동으로 수행하는 방법 입니다.
<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>
Shane Kms 답변 외에도 Nuget 패키지 복원을 활성화 한 경우 다음과 같이 .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/NuGet-Config-Settings
https://github.com/NuGet/Home/issues/1346
이 나타납니다
- 다른 repositoryPath로 Install-Package를 올바르게 작동 시키려면 슬래시 를 사용해야 합니다 . Uri 객체를 사용하여 위치를 구문 분석하기 때문입니다.
- 처음에 $ 가 없으면 여전히 내 설정을 무시하고있었습니다.
- NuGet은 구성 파일을 캐시하므로 수정 후 솔루션 / VS를 다시로드해야합니다.
- AppData \ Roaming \ NuGet에서 내 글로벌 NuGet.exe를 수정하고 패키지를 복원하기 시작했기 때문에 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
.NET Core 프로젝트 및 Visual Studio 2017의 경우 다음 구성을 제공하여 모든 패키지를 상대 경로로 복원 할 수있었습니다.
<configuration>
<config>
<add key="globalPackagesFolder" value="lib" />
</config>
...
</configuration>
내 경험에 따르면 lib 폴더는 sln 파일의 위치에 관계없이 Nuget.config가있는 것과 동일한 수준에서 만들어졌습니다. 테스트했으며 동작은 명령 줄 닷넷 복원과 동일하며 Visual Studio 2017 재 구축
허용 된 답변의 구성 파일은 VS2012에서 작동합니다. 그러나 나를 위해 다음을 수행 할 때만 작동합니다.
- VS에서 새 프로젝트를 만듭니다.
- Exit VS-이것은 중요한 것 같습니다.
- 구성 파일을 프로젝트 폴더로 복사하십시오.
- VS를 다시 시작하고 패키지를 추가하십시오.
이 단계를 따르면 공유 패키지 폴더를 사용할 수 있습니다.
내가 방금 발견 한 또 하나의 작은 음식. (이것은 너무 기본적이어서 일부는 언급하지 않았지만 내 솔루션에는 중요했습니다.) "packages"폴더는 .sln 파일과 같은 폴더에있게됩니다.
.sln 파일을 옮긴 다음 내부의 모든 경로를 수정하여 다양한 프로젝트와 짜잔을 찾습니다! 패키지 폴더는 원하는 위치에있게되었습니다.
VS 2017 업데이트 :
Nuget 팀의 사람들이 마침내 Nuget을 사용하기 시작하여 몇 가지 중요한 것을 찾고 수정하는 데 도움이되었습니다. 따라서 지금 (실제로 VS 2017로 마이그레이션하지 않았으므로 실수하지 않은 경우) 아래는 더 이상 필요하지 않습니다. "repositoryPath"를 로컬 폴더로 설정하면 작동합니다. 기본적으로 솔루션 폴더에서 시스템 레벨로 이동 한 기본 복원 위치로 그대로 둘 수도 있습니다. 다시-나는 여전히 혼자서 테스트하지 않았다.
VS 2015 이하
다른 답변에 대한 팁 (특히 this ) :
NuGet Package 폴더의 위치는 구성을 통해 변경할 수 있지만 VisualStudio는 여전히이 폴더의 어셈블리를 상대적으로 참조합니다.
<HintPath>..\..\..\..\..\..\SomeAssembly\lib\net45\SomeAssembly.dll</HintPath>
이 문제를 해결하기 위해 (더 나은 솔루션이 될 때까지) subst 명령을 사용하여 패키지 폴더의 새 위치를 가리키는 가상 드라이브를 만들었습니다.
subst N: C:\Development\NuGet\Packages
이제 새로운 NuGet 패키지를 추가 할 때 프로젝트 참조는 절대 위치를 사용합니다.
<HintPath>N:\SomeAssembly\lib\net45\SomeAssembly.dll</HintPath>
노트 :
- 이러한 가상 드라이브는 다시 시작한 후에 삭제되므로 처리해야합니다.
- 프로젝트 파일에서 기존 참조를 바꾸는 것을 잊지 마십시오.
Nuget 2.8.3으로 업데이트 중입니다. 설치된 패키지의 위치를 변경하기 위해 오른쪽 클릭 솔루션에서 패키지 복원을 활성화했습니다. NuGet.Config를 편집하고 다음 줄을 추가했습니다.
<config>
<add key="repositorypath" value="..\Core\Packages" />
</config>
그런 다음 솔루션을 다시 빌드하고 모든 패키지를 원하는 폴더로 다운로드하고 참조를 자동으로 업데이트했습니다.
가장 일관된 방법은을 사용하여 구성 nuget config
을 올바르게 설정하는 것입니다.
nuget config -set repositoryPath=c:\packages -configfile c:\my.config
packages.config 대신 PackageReference를 사용하여 프로젝트의 경로를 변경하려면 globalPackagesFolder
에서 https://docs.microsoft.com/en-us/nuget/reference/nuget-config-file
globalPackagesFolder (PackageReference를 사용하는 프로젝트 만 해당)
기본 전역 패키지 폴더의 위치 기본값은 % userprofile % .nuget \ packages (Windows) 또는 ~ / .nuget / packages (Mac / Linux)입니다. 프로젝트 별 nuget.config 파일에서 상대 경로를 사용할 수 있습니다. 이 설정은 NUGET_PACKAGES 환경 변수에 의해 우선하며이 변수가 우선합니다.
repositoryPath (packages.config 만)
기본 $ (Solutiondir) / packages 폴더 대신 NuGet 패키지를 설치할 위치입니다. 프로젝트 별 nuget.config 파일에서 상대 경로를 사용할 수 있습니다. 이 설정은 NUGET_PACKAGES 환경 변수에 의해 우선하며이 변수가 우선합니다.
<config>
<add key="globalPackagesFolder" value="c:\packageReferences" />
<add key="repositoryPath" value="c:\packagesConfig" />
</config>
솔루션 파일 옆에 Nuget.config를 넣고 작동했습니다.
'IT' 카테고리의 다른 글
미디어 쿼리는 화면 대신 div 요소를 기반으로 크기를 조정할 수 있습니까? (0) | 2020.03.24 |
---|---|
Spring Security를 사용할 때 Bean에서 현재 사용자 이름 (예 : SecurityContext) 정보를 얻는 올바른 방법은 무엇입니까? (0) | 2020.03.24 |
"is None"과 "== None"의 차이점은 무엇입니까 (0) | 2020.03.24 |
Java에서 String을 InputStreamReader로 바꾸는 방법은 무엇입니까? (0) | 2020.03.24 |
jQuery 지연을 어떻게 사용할 수 있습니까? (0) | 2020.03.24 |