Solución:
Si usa Visual Studio 2017 o posterior, que se incluye con MSBuild 15 o posterior, y sus archivos .csproj están en la nueva PackageReference
formato, el método más simple es usar el nuevo MSBuild Restore
objetivo.
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 consulte a continuación). Si está intentando hacer, por ejemplo, compilaciones automatizadas en un servidor CI, esto apesta.
Sin embargo, hay una forma ligeramente indirecta de obtener el comportamiento deseado:
- Descargue el último ejecutable de NuGet desde https://dist.nuget.org/win-x86-commandline/latest/nuget.exe y colóquelo en algún lugar de su RUTA. (Puede hacer esto como un paso previo a la compilación).
- Correr
nuget restore
que descargará automáticamente todos los paquetes faltantes. - Correr
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 el 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?
La restauración automática de paquetes de Nuget es una función de Visual Studio (a partir de 2013), no MSBuild. Tendrás que correr nuget.exe restore
si desea restaurar paquetes desde la línea de comandos.
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.
ACTUALIZADO con la documentación oficial más reciente de NuGet a partir de v3.3.0
Enfoques de restauración de paquetes
NuGet ofrece tres enfoques para usar la restauración de paquetes.
Restauración automática de paquetes es el enfoque recomendado por el equipo de NuGet para la restauración de paquetes en Visual Studio y se introdujo en NuGet 2.7. A partir de NuGet 2.7, la extensión de Visual Studio de NuGet se integra en los eventos de compilación de Visual Studio y restaura los paquetes faltantes cuando comienza una compilación. Esta función está habilitada de forma predeterminada, pero los desarrolladores pueden optar por no participar si lo desean.
Así es como funciona:
- En la compilación del proyecto o la solución, Visual Studio genera un evento de que una compilación está comenzando dentro de la solución.
- NuGet responde a este evento y comprueba los archivos packages.config incluidos en la solución.
- Para cada archivo packages.config encontrado, sus paquetes se enumeran y se comprueba si existe en la carpeta de paquetes de la solución.
- Los paquetes que faltan se descargan de las fuentes del paquete configuradas (y habilitadas) del usuario, respetando el orden de las fuentes del paquete.
- A medida que se descargan los paquetes, se descomprimen en la carpeta de paquetes de la solución.
Si tiene Nuget 2.7+ instalado; es importante elegir un método para> administrar la restauración automática de paquetes en Visual Studio.
Hay dos métodos disponibles:
- (Nuget 2.7+): Visual Studio -> Herramientas -> Administrador de paquetes -> Configuración del administrador de paquetes -> Habilitar restauración automática de paquetes
- (Nuget 2.6 y versiones anteriores) Haga clic con el botón derecho en una solución y haga clic en “Habilitar restauración de paquete para esta solución”.
Restauración del paquete de la línea de comandos es necesario cuando se crea una solución desde la línea de comandos; se introdujo en las primeras versiones de NuGet, pero se mejoró en NuGet 2.7.
nuget.exe restore contoso.sln
Restauración del paquete integrado en MSBuild
El enfoque es la implementación de Restauración de paquetes original y, aunque continúa funcionando en muchos escenarios, no cubre el conjunto completo de escenarios abordados por los otros dos enfoques.