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 об этом локальном репозитории?
Спасибо большое!
Ответы
Ответ 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 с правильными зависимостями.