visual studio microsoft cli nuget

microsoft - nuget visual studio 2015



¿Cómo consigo que NuGet instale/actualice todos los paquetes en packages.config? (16)

Tengo una solución con múltiples proyectos en ella. Faltan la mayoría de las referencias de terceros, sin embargo, hay un archivo packages.config para cada proyecto. ¿Cómo consigo que NuGet instale / actualice todos los paquetes necesarios? ¿Es necesario hacer esto a través de la línea de comandos para cada proyecto?


Aquí hay otra solución si está utilizando proyectos de sitios web o si no desea habilitar la restauración del paquete NuGet.

Puede usar la consola del administrador de paquetes para enumerar todos los paquetes en el archivo package.config y volver a instalarlos.

# read the packages.config file into an XML object [xml]$packages = gc packages.config # install each package $packages.packages.package | % { Install-Package -id $($_.id) -Version $($_.version) }



Creo que lo primero que debe hacer es habilitar la función de restauración del paquete . Véase también here . Esto se hace a nivel de solución (no de proyecto).

Pero eso no lo ayudará a llegar del todo: me topé con un problema similar luego de haber habilitado la función de restauración. (VS2013, NuGet 2.8.)

Resultó que (involuntariamente) había comprometido los paquetes al control de origen cuando ejecuté el proyecto, pero Visual Studio (y el complemento de control de origen) habían ignorado los archivos binarios al realizar el check-in.

El problema surgió cuando creé una rama de lanzamiento. Mi copia local de la rama dev / main / trunk tenía los binarios, porque ahí es donde originalmente había instalado / descargado los paquetes.
Sin embargo, en la nueva rama de lanzamiento,

  • todas las carpetas del paquete y los archivos .nupkg estaban allí, por lo que NuGet no creía que hubiera algo que restaurar;
  • pero al mismo tiempo, ninguna de las DLL estaba presente, es decir, faltaban las referencias de terceros, por lo que no pude compilar.

Eliminé todas las carpetas de paquetes en $(SolutionDir)/packages (bajo la rama de lanzamiento) y luego ejecuté una reconstrucción completa, y esta vez la compilación tuvo éxito.
... y luego, por supuesto, volví y eliminé las carpetas de paquetes del control de origen (en el tronco y la rama de lanzamiento). No tengo claro (aún) si el archivo repositories.config debe eliminarse.

Muchos de los componentes instalados para usted por las plantillas de proyecto, al menos para proyectos web, son paquetes de NuGet. Es decir, este problema no se limita a los paquetes que ha agregado.
Así que habilite la restauración de paquetes inmediatamente después de crear el proyecto / solución, y antes de realizar un registro inicial, borre la carpeta de packages (y asegúrese de confirmar la carpeta .nuget con el control de origen).

Descargo de responsabilidad: Vi otra respuesta aquí en SO que indicaba que borrar la carpeta de packages era parte de la resolución. Eso me puso en el camino correcto, así que me gustaría darle crédito al autor, pero ya no puedo localizar esa pregunta / respuesta. Publicaré una edición si me tropiezo con ella.

También me gustaría tener en cuenta que Update-Package -reinstall modificará los archivos .sln y .csproj / .vbproj . Al menos eso fue lo que hizo en mi caso. Que IMHO hace que esta opción sea mucho menos atractiva.


Después de 3 horas de búsqueda e investigación.

Tuve problemas con él porque tenemos dos miembros en el equipo (usando el control de código fuente de GitHub), porque no restringimos los archivos para que los paquetes se enviaran al repositorio remoto, uno de los miembros del equipo fue el envío de paquetes al servidor y tengo que retirar los cambios. mi local

Después de eso tuve el mismo problema que PO, y tampoco pude publicar mi proyecto de API en el servidor.

En el y acabo de utilizar

Update-Package -Reinstall : ejecuta este comando en la consola de Package Manager

Este comando reinstalará todos los paquetes que haya usado en su solución. (Para cada proyecto)

Reinstale todos los paquetes en TODOS LOS PROYECTOS de la solución actual:

Update-Package -ProjectName ''NameOfProject'' -Reinstall - ejecute este comando en la consola de Package Manager

Este comando reinstalará todos los paquetes que estén en relación con el proyecto que especificó después de "-ProjectName". Y creo que esto es mejor porque tuve que esperar media hora para volver a instalar todos los paquetes en la solución.

Muchas gracias a .

Además, le recomendaría que cuando extraiga cambios del servidor remoto, presione el botón "Restaurar paquetes" que se mostrará en Visual Studio.


En VS2012 V11, si uso "-Reinstalar" al final de la línea, no funciona.

Así que simplemente utilicé:

Update-Package -ProjectName ''NAME_OF_THE_PROJECT''


En Visual Studio 2017: cuando compile utilizando IDE, descargará todos los paquetes nuget que faltan y los guardará en la carpeta "paquetes".

Pero en la compilación de la máquina de compilación se realizó utilizando msbuild.exe. En ese caso, descargué nuget.exe.

Durante cada proceso de compilación antes de ejecutar msbuild.exe. Ejecutará -> nuget.exe restaura NAME_OF_SLN_File (si solo hay un archivo .SLN, puedes ignorar ese parámetro).


Estoy usando Visual Studio 2015 y las soluciones dadas arriba no funcionaron para mí, así que hice lo siguiente:

Eliminar la carpeta de paquetes de mi solución y también las carpetas bin y obj de cada proyecto en la solución y reconstruirla.

Tal vez tengas el siguiente error:

incapaz de localizar nuget.exe

Para resolver esto: cambia esta línea en tu archivo NuGet.targets y configúralo en verdadero:

<DownloadNuGetExe Condition=" ''$(DownloadNuGetExe)'' == '''' ">true</DownloadNuGetExe>

Referencia: https://.com/a/30918648 y https://.com/a/20502049


Hay otra forma más nueva y rápida de hacerlo desde Visual Studio. Echa un vistazo a esta publicación de David Ebbo, y consulta la sección de comentarios si tienes problemas. Básicamente, haces lo siguiente en el indicador del Administrador de paquetes:

PM> Install-Package NuGetPowerTools PM> Enable-PackageRestore

Luego, cuando construya su solución, los paquetes se instalarán automáticamente si faltan.

Actualizar:

Esta funcionalidad está integrada en Nuget 1.6 con la integración de Visual Studio, por lo que ni siquiera necesita instalar NuGetPowerTools o escribir comandos. Todo lo que tienes que hacer es

Haga clic derecho en el nodo Solución en el Explorador de soluciones y seleccione Habilitar restauración de paquetes NuGet.

Lea este artículo para más detalles.


Para aquellos que llegan aquí debido a que el servidor de compilación no cumple con esto, puede crear un destino de MSBuild ejecutando el comando exec para ejecutar el comando nuget restore , 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 inmediatamente antes de construir la solución

<Target Name="BeforeBuild"> <Exec Command="../.nuget/nuget restore ../MySolution.sln"/> </Target>


Puede usar nuget.exe para restaurar sus paquetes o con NuGet 2.7, o más, instalado, simplemente puede compilar su solución en Visual Studio, que también restaurará los paquetes faltantes.

Para NuGet.exe puede ejecutar el siguiente comando para cada proyecto.

nuget install packages.config

O con NuGet 2.7 puede restaurar todos los paquetes en la solución usando la línea de comandos.

nuget restore YourSolution.sln

Ambos tirarán hacia abajo los paquetes. Sus archivos de proyecto no se modificarán, sin embargo, al ejecutar este comando, el proyecto ya debería tener una referencia a los paquetes de NuGet. Si este no es el caso, puede usar Visual Studio para instalar los paquetes.

Con NuGet 2.7 y versiones posteriores, Visual Studio restaurará automáticamente los paquetes faltantes de NuGet cuando construya su solución, por lo que no es necesario usar NuGet.exe.

Para actualizar todos los paquetes en su solución, primero restaurelos y luego puede usar NuGet.exe para actualizar los paquetes o desde Visual Studio puede actualizar los paquetes desde la ventana de la Consola del Administrador de Paquetes, o finalmente puede usar el Paquetes de diálogo.

Desde la línea de comandos, puede actualizar los paquetes en la solución a la última versión disponible en nuget.org.

nuget update YourSolution.sln

Tenga en cuenta que esto no ejecutará ningún script de PowerShell en ningún paquete de NuGet.

Desde dentro de Visual Studio puede usar la Consola del administrador de paquetes para actualizar también los paquetes. Esto tiene la ventaja de que todos los scripts de PowerShell se ejecutarán como parte de la actualización y, al usar NuGet.exe, no se ejecutarán. El siguiente comando actualizará todos los paquetes en cada proyecto a la última versión disponible de nuget.org.

Update-Package

También puede restringir esto a un proyecto.

Update-Package -Project YourProjectName

Si desea volver a instalar los paquetes en las mismas versiones que se instalaron anteriormente, puede usar el argumento -reinstall con el comando Update-Package .

Update-Package -reinstall

También puede restringir esto a un proyecto.

Update-Package -reinstall -Project YourProjectName

La opción de -reinstall primero se desinstalará y luego volverá a instalar el paquete en un proyecto.

O bien, puede actualizar los paquetes utilizando el cuadro de diálogo Manage Packages .

Actualizaciones:

  • 2013/07/10 - Actualizado con información sobre la restauración de nuget en NuGet 2.7
  • 06/07/2014 : se actualizó con información sobre la restauración automática de paquetes en Visual Studio y se actualizó la respuesta con otros cambios en NuGet.
  • 2014/11/21 - Actualizado con información sobre -reinstall

Reinstale todos los paquetes en TODOS LOS PROYECTOS de la solución actual:

Update-Package -Reinstall

Reinstale todos los paquetes en el PROYECTO ESPECÍFICO de la solución actual ( gracias a unarity y ashes999 ):

Update-Package -ProjectName ''YourProjectNameGoesHere'' -Reinstall


Sé que este es un post antiguo, pero pensé que esto podría ser útil. Si necesita ignorar paquetes específicos durante el proceso de actualización (como cualquier paquete que actualice las referencias de JavaScript), use la siguiente secuencia de comandos de PowerShell (asegúrese de que la fuente de su paquete esté establecida en "Todos" en la Consola de Package Manager):

EDITAR 2014-09-25 10:55 AM EST - Se corrigió un error en el script

$packagePath = "packages.config" $projectName = "MyProjectName" $packagesToIgnore = @( "bootstrap", "jQuery", "jquery-globalize", "jquery.mobile", "jQuery.jqGrid", "jQuery.UI.Combined", "jQuery.Validation", "Microsoft.jQuery.Unobtrusive.Validation", "Modernizr", "Moment.js" ) [xml]$packageFile = gc $packagePath $packagesToProcess = $packageFile.packages.package | Where-Object {$packagesToIgnore -notcontains $_.id} $packagesToProcess | % { Update-Package -reinstall -projectname $projectName -id $($_.id) }


Si instala Nuget 2.8, marque la casilla de verificación

Tools >> Nuget Manager >> Package Manager Settings >> Automatically check for missing packages during build

en Visual Studio. Si está marcado, simplemente reconstruya el proyecto para restaurar todas sus bibliotecas de referencia.


ahora, la consola de Nuget Package Manager en Visual Studio 2012 le da un botón "Restaurar" automáticamente tan pronto como encuentre cualquier paquete que no esté instalado pero que esté allí en package.config. Característica impresionante!


Update-Package -reinstall pero falla en un paquete y dejé de procesar todos los paquetes de proyectos restantes en mi solución.

Terminé con mi script que enumera todos los archivos package.config y ejecuto Update-Package -Reinstall -ProjectName prj -Id pkg para cada proyecto / paquete.

Espero que pueda ser útil para alguien:

$files = Get-ChildItem -Recurse -Include packages.config; [array]$projectPackages = @(); $files | foreach { [xml]$packageFile = gc $_; $projectName = $_.Directory.Name; $packageFile.packages.package.id | foreach { $projectPackages += @( ,@( $projectName, $_ ) ) } } $projectPackages | foreach { Update-Package -Reinstall -ProjectName $_[0] -Id $_[1] }

Editar: Este es un error que tuve: Paquete de actualización: No se pudo encontrar el paquete ''EntityFramework.BulkInsert-ef6''. Los paquetes existentes deben restaurarse antes de realizar una instalación o actualización. La ejecución manual de Update-Package -Reinstall -ProjectName my_prj -Id EntityFramework.BulkInsert-ef6 funcionó muy bien.


Update-Package -ProjectName ''YourProjectNameGoesHere'' -Reinstall

Este es el mejor y más fácil ejemplo que encontré. Reinstalará todos los nugets que se enumeran en packages.config y conservará las versiones actuales. Reemplace YourProjectNameGoesHere con el nombre del proyecto.