Можно ли изменить расположение пакетов для NuGet? - PullRequest
273 голосов
/ 04 ноября 2010

У меня есть следующее соглашение для большинства моих проектов:

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

Вы заметите, что я не храню внешние библиотеки внутри исходной папки,Я также очень заинтересован в использовании NuGet, но не хочу, чтобы эти внешние библиотеки находились в исходной папке.Есть ли в NuGet настройка для изменения каталога, в который загружаются все пакеты?

Ответы [ 14 ]

3 голосов
/ 19 октября 2015

ОБНОВЛЕНИЕ для VS 2017:

Похоже, люди в команде Nuget наконец-то сами начали использовать Nuget, что помогло им найти и исправить несколько важных вещей.Так что теперь (если я не ошибаюсь, так как все еще не мигрировал на VS 2017) ниже не нужно больше.Вы должны быть в состоянии установить «repositoryPath» для локальной папки, и она будет работать.Даже вы можете вообще его оставить, так как по умолчанию место восстановления перемещено из папок решения на уровень компьютера.Опять же - я все еще не проверял это сам

VS 2015 и более ранних версий

Просто совет для других ответов (в частности this ):

Расположение папки пакета NuGet можно изменить с помощью конфигурации, но VisualStudio по-прежнему ссылается на сборки в этой папке относительно:

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

Чтобы обойти это (до лучшего решения), я использовал subst команда для создания виртуального диска, который указывает на новое расположение папки Packages:

subst N: C:\Development\NuGet\Packages

Теперь при добавлении нового пакета NuGet ссылка на проект использует его абсолютное местоположение:

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

Примечание:

  1. Такой виртуальный диск будет удален после перезагрузки, поэтому убедитесь, что вы обработали его
  2. Не забудьтезаменить существующие ссылки в файлах проекта.
2 голосов
/ 23 ноября 2018

Чтобы изменить путь для проектов, использующих PackageReference вместо packages.config, необходимо использовать 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 переменная окружения, которая имеет приоритет.

путь к хранилищу (только packages.config)

Местоположение для установки пакетов NuGet вместо стандартных $ (Solutiondir) / пакетов папка. Относительный путь можно использовать в nuget.config для конкретного проекта файлы. Этот параметр переопределяется средой NUGET_PACKAGES переменная, которая имеет приоритет.

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

Я положил Nuget.config рядом с файлом решения, и он заработал.

2 голосов
/ 28 августа 2017

Наиболее последовательным способом является использование nuget config для правильной настройки конфигурации:

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

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

2 голосов
/ 09 ноября 2014

Просто обновление с помощью Nuget 2.8.3.Чтобы изменить расположение установленных пакетов, я включил восстановление пакетов из щелчка правой кнопкой мыши.Отредактировал NuGet.Config и добавил следующие строки:

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

Затем пересобрал решение, он загрузил все пакеты в мою нужную папку и автоматически обновил ссылки.

...