NuGet: команда pack НЕ включает зависимости nuget - PullRequest
19 голосов
/ 23 февраля 2012

У меня есть следующий параметр:

  • nuget.exe Версия: 1.6.21205.9031
  • Проект A.csproj упакован в A.1.0.0.0.nupkg и опубликован вЛокальный репозиторий пакетов, размещенный на моем локальном IIS (My VS Nuget Extension, я могу добавить A-пакет в новый проект)
  • Project B.csproj имеет зависимость от A-пакета, который я добавил с VSNuget Extension

Теперь, когда я запускаю

nuget spec

, создается B.nuspec.

Затем я запускаю

nuget pack B.csproj -verbose

но в созданном B-пакете их НЕТ зависимости от A-пакета.Команда nuget pack сообщает мне, что она нашла файл packages.config (который содержит зависимость от A-пакета), но затем сообщает «Зависимости: нет».

Что мне не хватает?Может ли быть проблема в том, что A-пакет можно найти только в моем локальном репозитории пакетов?Как я могу сообщить nuget.exe об этом локальном хранилище?

Большое спасибо!

Ответы [ 5 ]

14 голосов
/ 27 ноября 2013

nuget pack должен иметь возможность найти папку packages, чтобы разрешить зависимости (см. http://nuget.codeplex.com/workitem/3097), в той же папке, что и .csproj (при условии, что существует файл .sln). на уровень выше) или в папке, указанной в NuGet.Config.

3 голосов
/ 08 апреля 2013

Думаю, я мог это выяснить ...

В нашем решении для библиотеки было включено восстановление пакета Nuget.Я отключил NuGet Package Restore, и после этого зависимости проекта были включены при создании пакетов NuGet.

Я не совсем уверен, почему зависимости не были включены в пакет при включении Package Restore,ну да ладно:).

1 голос
/ 06 сентября 2016

Для меня отсутствовали зависимости, потому что у меня не было файлов *.nupkg в папке packages для всех пакетов, которые я использовал.

Это было довольно сложно отследить, потому чтовывод nuget pack выглядел так, как будто он работал:

Found packages.config. Using packages listed as dependencies

Я использовал Visual Studio GitHub .gitignore и прокомментировал только одну строку о «Восстановлении пакета» (потому чтоЯ хотел зафиксировать свои пакеты), но я должен был закомментировать два.Это должно выглядеть следующим образом:

# NuGet Packages
# *.nupkg
# The packages folder can be ignored because of Package Restore
# **/packages/*

Благодаря ответу Рика Мора за ссылку на рабочий элемент CodePlex 3097 , где написание файла объясняет, как папка packagesиспользуется:

Поскольку packages.config содержит только список пакетов и не содержит отношения зависимости между этими пакетами, nuget должен получить доступ к этим файлам пакета, чтобы получить информацию о зависимости.Вот почему ему нужно знать папку с пакетами.

Информация о зависимостях, на которую ссылается файл, находится внутри файлов *.nupkg.После того как я изменил .gitignore и зафиксировал все отсутствующие *.nupkg файлы, мой сервер сборки TeamCity смог успешно создать мой пакет NuGet с правильными зависимостями.

1 голос
/ 04 августа 2015

Аналогичный вопрос был задан здесь , и ответ объясняет, что:

Причина, по которой это вызывает проблемы, заключается в том, что NuGet ищет папку пакетов уровня решения, чтобы решить, какие зависимости пакетавтянуть (не совсем уверен, как это определение сделано).Если путь к этой папке пакетов неправильный (как если бы NuGet использовал неправильный файл решения), он не может правильно разрешить зависимости.Кроме того, если папка пакетов пуста, она также не может правильно разрешить зависимости.

У меня была такая же проблема, и добавление файла решения в папку проекта (ранее без решения) помогло мне решить проблему.

1 голос
/ 27 июня 2012

'Nuget.exe spec A.csproj' создаст очень тонкий файл NuSpec, который не будет иметь никаких зависимостей. Для нашего процесса используйте скрипт powershell, чтобы добавить ссылки проекта и другие зависимости из packages.config проекта в узел <dependency> в B.nuspec.

'Nuget.exe pack A.nuspec' будет правильным.

...