2012-02-23 7 views
17

у меня есть следующие настройки:NuGet: команда пакет не включает зависимостей NuGet

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

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

nuget spec 

B.nuspec создан.

Тогда я бегу

nuget pack B.csproj -verbose 

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

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

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

+5

Имея ту же проблему – terjetyl

+0

Мне также хотелось бы узнать ответ на эту проблему. В документации указывается, что шаг ncs с пакетом B.csproj * должен * включать зависимости, но это не для меня. –

+2

Все еще такая же проблема и ни одно из перечисленных решений не работает. – cbp

ответ

1

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

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

+1

Обратите внимание, что OP использует 'nuget pack' с файлом .csproj. Это предназначено для учета зависимостей, записанных в .csproj, как с добавлением nuget, так и с любыми ссылками на другие проекты в том же решении, которое имеет файл .nuspec. –

2

Я думаю, что я, возможно, понял это ...

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

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

13

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

+0

+1 Я установил папку 'packages' в' nuget-packages' в Nuget.Config. Переименование его исправило проблему для меня. –

+4

Казалось бы, NuGet потерпит неудачу или, по крайней мере, выпустит предупреждение, если он не сможет добавить зависимость от своего списка зависимостей, поскольку это приводит к генерации неправильных пакетов с неполными списками зависимостей. Хотелось бы, чтобы была возможность получить отказ от таких проблем, а не «завершить успешно» и оставить пользователям пакетов узнать, почему для них не работает. –

1

Похожий вопрос был задан here, и ответ объясняет, что:

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

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

1

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

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

Found packages.config. Using packages listed as dependencies 

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

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

Благодаря Rick Mohr's answer для связи с CodePlex work item 3097, где Feiling объясняет, как используется папка packages:

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

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

Смежные вопросы