2012-02-23 34 views
17

tengo la siguiente configuración:NuGet: comando de paquete no está incluyendo dependencias NuGet

  • Versión nuget.exe: 1.6.21205.9031
  • Proyecto A.csproj empaqueta en A.1.0.0.0.nupkg, y publicado en un repositorio de paquetes LOCAL alojado en mi IIS local (Mi extensión VS Nuget puedo agregar el paquete A a un nuevo proyecto)
  • Proyecto B.csproj tiene una dependencia con el paquete A que agregué con el VS Nuget Extension

Ahora, cuando ejecuto

nuget spec 

se crea B.nuspec.

Luego ejecutar

nuget pack B.csproj -verbose 

pero en el B-paquete creado, su no hay dependencia de la A-paquete. El comando nuget pack me dice que ha encontrado el archivo packages.config (que contiene la dependencia del paquete A), pero luego dice "Dependencies: None".

¿Qué me falta? ¿El problema podría ser que el paquete A solo se puede encontrar en mi repositorio de paquetes local? ¿Cómo puedo hacer que nuget.exe conozca este repositorio local?

¡Muchas gracias!

+5

Tener el mismo problema – terjetyl

+0

Me gustaría saber la respuesta a este problema también. La documentación indica que el paquete nuget B.csproj paso * debe * incluir dependencias, pero no lo hace para mí. –

+2

Sigue el mismo problema aquí y ninguna de las soluciones enumeradas funciona. – cbp

Respuesta

1

'Nuget.exe spec A.csproj' creará un archivo NuSpec muy delgado que no tendrá ninguna dependencia. Para nuestro proceso use un script powershell para agregar las referencias del proyecto y otras dependencias del proyecto packages.config al nodo <dependency> en B.nuspec.

'Nuget.exe pack A.nuspec' corre entonces.

+1

Tenga en cuenta que OP está usando 'nuget pack' con un archivo .csproj. Esto está diseñado para tener en cuenta las dependencias registradas en .csproj, tanto las agregadas con nuget como cualquier referencia a otros proyectos en la misma solución que tengan un archivo .nuspec. –

2

creo que pude haber dado cuenta de esto ...

Nuestra solución biblioteca había Nuget paquete Restaurar encendido. Desactivé NuGet Package Restore, y después de eso, las dependencias del proyecto se incluyeron cuando creé los paquetes NuGet.

No estoy muy seguro de por qué las dependencias no se incluyeron en el paquete cuando se activó el paquete de restauración, pero bueno :).

13

nuget pack tiene que ser capaz de encontrar la carpeta packages con el fin de resolver las dependencias (véase http://nuget.codeplex.com/workitem/3097), ya sea en la misma carpeta que el .csproj (siempre y cuando haya una sola planta .sln archivo por encima de ella) o en una carpeta especificado en NuGet.Config.

+0

+1 Había personalizado la carpeta 'packages' en' nuget-packages' en Nuget.Config. Renombrarlo me solucionó el problema. –

+4

Uno pensaría que NuGet podría fallar o, por lo menos, emitir una advertencia si no puede agregar una dependencia a su lista de dependencias, ya que esto genera la generación de paquetes incorrectos con listas de dependencia incompletas. Me gustaría que hubiera una opción disponible para fallar en tales problemas en lugar de "completar con éxito" y dejar a los usuarios de los paquetes para descubrir por qué las cosas no funcionan para ellos. –

1

pregunta similar se preguntó here, y la respuesta se explica que:

La razón por la cual éstos estaban causando problemas es porque NuGet busca la carpeta de paquetes de nivel de solución a decidir qué dependencias del paquete para tirar en (no muy seguro de cómo esta determinación está hecha). Si la ruta a esa carpeta de paquetes es incorrecta (como lo sería si NuGet utiliza el archivo de solución incorrecto), entonces no puede resolver las dependencias correctamente. Además, si la carpeta de paquetes está vacía, tampoco puede resolver las dependencias correctamente.

Tuve el mismo problema y agregar el archivo de solución a la carpeta del proyecto (anteriormente sin solución) me ayudó a resolver el problema.

1

Las dependencias me faltaban porque no tenía los archivos *.nupkg en la carpeta packages para todos los paquetes que estaba usando.

Esto era bastante difícil de rastrear, ya que la salida de nuget pack parecía que estaba trabajando:

Found packages.config. Using packages listed as dependencies 

que había estado utilizando GitHub's Visual Studio .gitignore y sólo comentada la línea de "Paquete de restauración" (porque quería comprometer mis paquetes), pero debería haber comentado dos. Se debe tener este aspecto:

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

Gracias a Rick Mohr's answer para ligarse a la CodePlex work item 3097, donde Feiling explica cómo se utiliza la carpeta packages:

Desde packages.config contiene sólo una lista de paquetes, y no lo hace contienen una relación de dependencia entre esos paquetes, nuget necesita acceder a esos archivos de paquete para obtener la información de dependencia. Es por eso que necesita saber la carpeta de paquetes.

La información de dependencia a la que hace referencia se encuentra dentro de los archivos *.nupkg. Una vez que cambié el .gitignore y confié todos los archivos *.nupkg faltantes, mi servidor de compilación TeamCity fue capaz de crear exitosamente mi paquete NuGet con las dependencias correctas.

Cuestiones relacionadas