[.net] 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