У меня есть следующее соглашение для большинства моих проектов:
/src
/Solution.sln
/SolutionFolder
/Project1
/Project2
/etc..
/lib
/Moq
moq.dll
license.txt
/Yui-Compressor
yui.compressor.dll
/tools
/ILMerge
ilmerge.exe
Вы заметите, что я не храню внешние библиотеки внутри исходной папки. Я также очень заинтересован в использовании NuGet, но не хочу, чтобы эти внешние библиотеки находились в исходной папке. Есть ли в NuGet настройка для изменения каталога, в который загружаются все пакеты?
.net
visual-studio
nuget
nuget-package
TheCloudlessSky
источник
источник
Ответы:
Теперь можно контролировать, в какую папку устанавливаются пакеты.
http://nuget.codeplex.com/workitem/215
Изменить: См. Комментарий Фила Хаака 10 декабря 2010 в 23:45 (в рабочем элементе / ссылка выше). Поддержка частично реализована в версии 1.0, но не документирована.
Согласно @dfowler: Добавьте файл nuget.config рядом с решением с помощью этого:
Существует пакет nuget для создания переопределения папки пакета.
Обновление для версии 2.1
Как прокомментировал Азат, сейчас есть официальная документация о том, как контролировать расположение пакетов. В примечаниях к выпуску 2.1 указывается следующая конфигурация в файле nuget.config (описание допустимых мест для размещения файлов конфигурации и описание работы иерархической модели конфигурации см. В примечаниях к выпуску):
Это изменит папку пакетов для уровня конфигурации, в который вы помещаете файл (решение, если вы поместите его в каталог решения, проект в каталог проекта и т. Д.). Обратите внимание, что в примечаниях к выпуску указано:
источник
это не работает для меня:
это сработало для меня:
источник
Хорошо, ради кого-то еще, читающего этот пост - вот что я понимаю из множества ответов выше:
Файл nuget.config в .nuget папки по отношению к этой папке. Это важно, потому что, если ваша новая папка похожа на «../Packages», она будет помещена туда, где она всегда есть из коробки. Поскольку @ bruce14 утверждает, что вместо этого вы должны сделать '../../Packages'
Я не смог получить последнюю версию nuget (2.8.5) для поиска папки с пакетами за пределами стандартного местоположения без включения восстановления пакетов. Поэтому, как только вы включите восстановление пакета, в файл nuget.config внутри папки .nuget необходимо добавить следующее:
(Это важно). Если вы вносите ЛЮБЫЕ изменения в расположение папки пакета внутри файлов nuget.config, вы должны перезапустить Visual Studio или закрыть / перезагрузить решение, чтобы изменения вступили в силу.
источник
Решение для Nuget 3.2 в Visual Studio 2015:
Использование косой черты для родительской папки. Сохраните файл выше (nuget.config) в папке решения.
Ссылка доступна здесь
источник
../lib
Это косая черта, а не обратная. Что ты имеешь в виду?Решение, предложенное в примечаниях к выпуску 2.1, не работает "из коробки". Они забыли упомянуть, что есть код:
что мешает ему работать. Чтобы это исправить, вам нужно изменить файл NuGet.targets и удалить параметр «OutputDirectory»:
Так что теперь, если вы добавите конфигурацию 'repositoryPath' где-нибудь в NuGet.config (см. Примечания к выпуску для описания допустимых мест для размещения файлов конфигурации), он восстановит все пакеты в одном месте, но ... Ваш .csproj по-прежнему содержит подсказки для сборок, записанных в виде относительных путей ...
Я до сих пор не понимаю, почему они пошли не так, как надо, вместо того, чтобы изменить PackageManager, чтобы он добавлял пути подсказок относительно PackagesDir. Именно так я делаю вручную, чтобы иметь разные местоположения пакетов локально (на моем рабочем столе) и в агенте сборки.
источник
В дополнение к ответу Shane Kms, если вы активировали Восстановление пакета Nuget, вы измените файл NuGet.config, расположенный в папке .nuget, следующим образом:
Обратите внимание на лишнее «.. \», так как оно возвращается из папки .nuget, а не из папки решения.
источник
Ни один из этих ответов не работал для меня (Nuget 2.8.6) из-за отсутствия некоторых советов, постараюсь добавить их здесь, так как это может быть полезно для других.
После прочтения следующих источников:
https://docs.nuget.org/consume/NuGet-Config-Settings
https://github.com/NuGet/Home/issues/1346
Оказывается , что
Например
Вы также можете использовать команду NuGet, чтобы убедиться, что синтаксис будет правильным:
источник
Для проектов .NET Core и Visual Studio 2017 я смог восстановить все пакеты по относительному пути, предоставив следующую конфигурацию:
Исходя из моего опыта, папка lib была создана на том же уровне, где был найден Nuget.config, независимо от того, где находился файл sln. Я проверил, и поведение одинаково для восстановления командной строки и восстановления Visual Studio 2017
источник
globalPackagesFolder
ключ к папке пакета моего проекта. Я пытался добавить один пакет сdotnet add package MyPackage
.nuget.exe
загрузил всю структуру 83 пакетов .NET в эту папку. Это не то, что я хотел. Я просто хотел, чтобы мой единственный MyPackage находился в моей локальной, управляемой исходным кодом папке пакета.Конфиг-файл в принятом ответе у меня работает в VS2012. Впрочем, для меня это только работает тогда, когда я делаю следующее:
Если я буду следовать этим шагам, я смогу использовать общую папку пакета.
источник
Чтобы изменить путь для проектов, использующих PackageReference вместо packages.config, необходимо использовать
globalPackagesFolder
С https://docs.microsoft.com/en-us/nuget/reference/nuget-config-file
Я поместил Nuget.config рядом с моим файлом решения, и это сработало.
источник
Еще один маленький кусочек, который я только что обнаружил. (Это может быть настолько просто, что некоторые не упоминали об этом, но это было важно для моего решения.) Папка «packages» заканчивается в той же папке, что и ваш файл .sln.
Мы переместили наш файл .sln, а затем исправили все пути внутри, чтобы найти различные проекты и вуаля! Наша папка с пакетами оказалась там, где мы хотели.
источник
ОБНОВЛЕНИЕ для VS 2017:
Похоже, что люди в команде Nuget наконец-то сами начали использовать Nuget, что помогло им найти и исправить несколько важных вещей. Так что теперь (если я не ошибаюсь, так как все еще не мигрировал на VS 2017) ниже не нужно больше. Вы должны иметь возможность установить «repositoryPath» в локальную папку, и она будет работать. Даже вы можете вообще его оставить, так как по умолчанию место восстановления перемещено из папок решения на уровень компьютера. Снова - я все еще не проверял это самостоятельно
VS 2015 и ранее
Просто подсказка к другим ответам (именно этим ):
Расположение папки пакета NuGet можно изменить с помощью конфигурации, но VisualStudio по-прежнему ссылается на сборки в этой папке:
Чтобы обойти это (до лучшего решения), я использовал команду subst для создания виртуального диска, который указывает на новое расположение папки Packages:
Теперь при добавлении нового пакета NuGet ссылка на проект использует его абсолютное местоположение:
Примечание:
источник
<HintPath>$(SolutionDir)\packages\SomeAssembly\lib\net45\SomeAssembly.dll</HintPath>
вместо того, чтобы использоватьsubst
Просто обновление с Nuget 2.8.3. Чтобы изменить расположение установленных пакетов, я включил восстановление пакетов из щелчка правой кнопкой мыши. Отредактировал NuGet.Config и добавил следующие строки:
Затем пересобрал решение, он загрузил все пакеты в нужную папку и автоматически обновил ссылки.
источник
Наиболее последовательный способ - использовать
nuget config
правильную настройку конфигурации:https://docs.microsoft.com/en-us/nuget/consume-packages/configuring-nuget-behavior#changing-config-settings
источник