NuGet: команда pack не включает зависимости nuget - программирование
Подтвердить что ты не робот

NuGet: команда pack не включает зависимости nuget

i имеет следующую настройку:

  • 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

Теперь, когда я запустил

nuget spec

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

Затем я запустил

nuget pack B.csproj -verbose

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

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

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

Ответ 5

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

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

Found packages.config. Using packages listed as dependencies

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

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

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

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

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