Estoy tratando de crear una solución con packages
contenido faltante (excepto en el repositories.config
interior) con MSBuild 12.0. Espero que restaure automáticamente todos los paquetes faltantes antes de compilar, pero este no es el caso: MsBuild informa toneladas de errores:
"¿Le falta una directiva using o una referencia de ensamblado?"
NuGet Manager es 2.7 (veo esto en Visual Studio 2013 sobre el cuadro). Incluso intenté pasar el EnableNuGetPackageRestore=true
parámetro, sin suerte. ¿Qué me estoy perdiendo?
Respuestas:
ACTUALIZADO con la documentación oficial más reciente de NuGet a partir de v3.3.0
Enfoques de restauración de paquetes
fuente
Si está utilizando Visual Studio 2017 o posterior que se incluye con MSBuild 15 o posterior, y sus archivos .csproj están en el nuevo
PackageReference
formato , el método más simple es usar el nuevoRestore
destino de MSBuild .En realidad, nadie ha respondido a la pregunta original, que es "¿cómo consigo que los paquetes NuGet se restauren automáticamente al compilar desde la línea de comandos con MSBuild?" La respuesta es: a menos que esté utilizando la opción "Habilitar la restauración del paquete NuGet" (que ahora está en desuso según esta referencia ), no puede (pero vea a continuación). Si está intentando hacer, por ejemplo, compilaciones automatizadas en un servidor CI, esto apesta.
Sin embargo, hay una forma un poco indirecta de obtener el comportamiento deseado:
nuget restore
que descargará automáticamente todos los paquetes faltantes.msbuild
para construir su solución.Aparte: si bien la forma nueva y recomendada de realizar la restauración automática de paquetes implica menos desorden en su control de versiones, también hace que la restauración de paquetes desde la línea de comandos sea imposible a menos que pase por el aro adicional de descargar y ejecutar
nuget.exe
. ¿Progreso?fuente
nuget.exe
en / trunk / ext). Un paso adelante - dos pasos atrás :(La restauración automática de paquetes de Nuget es una característica de Visual Studio (a partir de 2013), no MSBuild. Deberá ejecutarlo
nuget.exe restore
si desea restaurar paquetes desde la línea de comando.También puede usar la función Habilitar restauración de paquetes de Nuget, pero la gente de nuget ya no la recomienda porque realiza cambios intrusivos en los archivos del proyecto y puede causar problemas si crea esos proyectos en otra solución.
fuente
Me tomó un tiempo darme cuenta de la imagen completa y me gustaría compartirla aquí.
Visual Studio tiene dos enfoques para usar la restauración de paquetes: Restauración automática de paquetes y Restauración de paquetes integrada de MSBuild. La 'Restauración de paquetes integrada de MSBuild' restaura paquetes DURANTE el proceso de construcción que pueden causar problemas en algunos escenarios. La 'Restauración automática de paquetes' es el enfoque recomendado por el equipo de NuGet.
Hay varios pasos para que funcione la 'Restauración automática de paquetes':
En Visual Studio, Herramientas -> Extensiones y actualizaciones, actualice NuGet si hay una versión más reciente (Versión 2.7 o posterior)
Si usa TFS, en la carpeta .nuget de su solución, elimine los archivos NuGet.exe y NuGet.targes. Luego edite NuGet.Config para no registrar los paquetes de NuGet:
Si ha registrado la carpeta de paquetes de la solución en TFS antes, elimine la carpeta y verifique la eliminación de la eliminación de la carpeta del paquete.
Si no usa TFS, elimine la carpeta .nuget.
En cada archivo de proyecto (.csproj o .vbproj) de su solución, elimine la línea que hace referencia al archivo NuGet.targets. La referencia se ve así:
Elimine esta línea en cada archivo de proyecto en su solución.
En el menú de Visual Studio, ya sea a través de
Herramientas -> Opciones -> Administrador de paquetes -> General o Herramientas -> Administrador de paquetes NuGet -> Configuración del administrador de paquetes
habilite las siguientes dos opciones 1) 'Permitir que NuGet descargue los paquetes que faltan' 2) 'Verifique automáticamente los paquetes que faltan durante la compilación en Visual Studio'
Pruebe la configuración de restauración de su paquete siguiendo los siguientes pasos
fuente
MSBuild 15 tiene una opción / t: restore que hace esto. viene con Visual Studio 2017.
Si desea usar esto, también debe usar el nuevo PackageReference , lo que significa reemplazar el
packages.config
archivo con elementos como este (haga esto en * .csproj):Hay una migración automatizada a este formato si hace clic con el botón derecho en 'Referencias' (es posible que no aparezca si acaba de abrir Visual Studio, reconstruir o abrir la ventana 'Administrar paquetes NuGet para la solución' y comenzará a aparecer).
fuente
Ian Kemp tiene la respuesta (tiene algunos puntos por cierto ...), esto es simplemente agregar algo de carne a uno de sus pasos.
La razón por la que terminé aquí fue que las máquinas de desarrollo se estaban construyendo bien, pero el servidor de compilación simplemente no estaba eliminando los paquetes requeridos (carpeta de paquetes vacía) y, por lo tanto, la compilación estaba fallando. Sin embargo, iniciar sesión en el servidor de compilación y compilar manualmente la solución funcionó.
Para cumplir con el segundo de los pasos de 3 puntos de Ians (ejecutar la restauración de nuget ), puede crear un destino MSBuild ejecutando el comando exec para ejecutar el comando de restauración de nuget, como se muestra a continuación (en este caso, nuget.exe está en la carpeta .nuget, en lugar de en la ruta), que luego se puede ejecutar en un paso de compilación de TeamCity (otros CI disponibles ...) inmediatamente antes de compilar la solución
Para el registro, ya probé el tipo de corredor "instalador nuget", pero este paso estaba colgado en proyectos web (funcionó para proyectos de DLL y Windows)
fuente
Tenga en cuenta que si está utilizando TeamCity como un servidor de compilación, obtendrá un paso de "Instalador NuGet" que puede usar para restaurar todos los paquetes antes del paso de compilación.
fuente
Hay un archivo packages.config con el proyecto, que contiene los detalles del paquete.
También hay una carpeta .nuget que contiene NuGet.exe y NuGet.targets . si falta alguno de los archivos, no restaurará el paquete faltante y causará "¿le falta una directiva using o una referencia de ensamblado?" error
fuente
.nuget
carpeta y nunca la hubo. Todos lospackages.config
archivos dentro de las carpetas del proyecto están en su lugar.A veces, esto ocurre cuando tiene la carpeta del paquete que está intentando restaurar dentro de la carpeta "paquetes" (es decir, "Paquetes / EntityFramework.6.0.0 /" ) pero las "DLL" no están dentro (la mayoría del control de versiones los sistemas ignoran automáticamente los archivos ".dll"). Esto ocurre porque antes de que NuGet intente restaurar cada paquete, verifica si las carpetas ya existen, por lo que, si existe, NuGet asume que el "dll" está dentro. Entonces, si este es el problema, simplemente elimine la carpeta que NuGet la restaurará correctamente.
fuente
Tuve un problema con los paquetes nuget que no se incluían en una compilación nocturna con script que compila el archivo sln usando devenv.exe.
Seguí el consejo de Microsoft y el paso clave fue actualizar la configuración de NuGet
%AppData%/NuGet
para que contuviera:fuente
En Visual Studio 2017, cuando compila usando IDE, descargará todos los paquetes nuget que faltan y los guardará en la carpeta "paquetes".
Pero en la máquina de compilación, la compilación se realizó con msbuild.exe. En ese caso, descargué nuget.exe y mantuve la ruta.
Durante cada proceso de compilación antes de ejecutar msbuild.exe. Se ejecutará -> nuget.exe restaurar NAME_OF_SLN_File (si solo hay un archivo .SLN, entonces puede ignorar ese parámetro)
fuente
También puedes usar
para restaurar los paquetes NuGet en la Consola de administración de paquetes en Visual Studio.
fuente