Actualizar todos los paquetes Nuget de un proyecto

NugetAunque a muchos pueda parecer simple, hay gran cantidad de desarrolladores que para actualizar los paquetes Nuget de un proyecto acuden a la herramienta de gestión incluida en el IDE y van actualizando uno por uno los componentes instalados.

Pues bien, resulta que desde hace algún tiempo, Nuget soporta la actualización automática de todos los paquetes de una solución. Para ello, basta con acudir a la consola de administración de paquetes (Tools > Library Package Manager > Package Manager Console) e introducir el comando update-package:

Consola de administración de paquetes
Por ejemplo, sobre una aplicación MVC 4 recién creada, el resultado es el siguiente:

PM> update-package
Updating 'Modernizr' from version '2.5.3' to '2.6.2' in project 'MyMvcProject'.
Successfully removed 'Modernizr 2.5.3' from MyMvcProject.
Successfully installed 'Modernizr 2.6.2'.
Successfully added 'Modernizr 2.6.2' to MyMvcProject.
Successfully uninstalled 'Modernizr 2.5.3'.
No updates available for 'Microsoft.jQuery.Unobtrusive.Validation' in project 'MyMvcProject'.
No updates available for 'Microsoft.jQuery.Unobtrusive.Ajax' in project 'MyMvcProject'.
No updates available for 'Microsoft.AspNet.WebPages.OAuth' in project 'MyMvcProject'.
No updates available for 'Microsoft.AspNet.WebPages.WebData' in project 'MyMvcProject'.
No updates available for 'Microsoft.AspNet.WebPages.Data' in project 'MyMvcProject'.
No updates available for 'Microsoft.AspNet.WebApi' in project 'MyMvcProject'.
No updates available for 'Microsoft.AspNet.WebApi.WebHost' in project 'MyMvcProject'.
No updates available for 'Microsoft.AspNet.WebApi.Core' in project 'MyMvcProject'.
No updates available for 'Microsoft.AspNet.WebApi.Client' in project 'MyMvcProject'.
Updating 'Newtonsoft.Json' from version '4.5.6' to '4.5.11' in project 'MyMvcProject'.
Successfully removed 'Newtonsoft.Json 4.5.6' from MyMvcProject.
Successfully installed 'Newtonsoft.Json 4.5.11'.
Successfully added 'Newtonsoft.Json 4.5.11' to MyMvcProject.
Successfully uninstalled 'Newtonsoft.Json 4.5.6'.
No updates available for 'Microsoft.Net.Http' in project 'MyMvcProject'.
No updates available for 'Microsoft.AspNet.Web.Optimization' in project 'MyMvcProject'.
Updating 'WebGrease' from version '1.1.0' to '1.3.0' in project 'MyMvcProject'.
Successfully removed 'WebGrease 1.1.0' from MyMvcProject.
You are downloading WebGrease from webgrease@microsoft.com, the license agreement to which is available at http://www.microsoft.com/web/webpi/eula/msn_webgrease_eula.htm. Check the package for additional dependencies, which may come with their own license agreement(s). Your use of the package and dependencies constitutes your acceptance of their license agreements. If you do not accept the license agreement(s), then delete the relevant components from your device.
Successfully installed 'WebGrease 1.3.0'.
Successfully added 'WebGrease 1.3.0' to MyMvcProject.
Successfully uninstalled 'WebGrease 1.1.0'.
No updates available for 'Microsoft.AspNet.Mvc' in project 'MyMvcProject'.
No updates available for 'Microsoft.AspNet.WebPages' in project 'MyMvcProject'.
Updating 'Microsoft.AspNet.Razor' from version '2.0.20710.0' to '2.0.20715.0' in project 'MyMvcProject'.
Successfully removed 'Microsoft.AspNet.Razor 2.0.20710.0' from MyMvcProject.
You are downloading Microsoft.AspNet.Razor from Microsoft, the license agreement to which is available at http://www.microsoft.com/web/webpi/eula/WebPages_2_eula_ENU.htm. Check the package for additional dependencies, which may come with their own license agreement(s). Your use of the package and dependencies constitutes your acceptance of their license agreements. If you do not accept the license agreement(s), then delete the relevant components from your device.
Successfully installed 'Microsoft.AspNet.Razor 2.0.20715.0'.
Successfully added 'Microsoft.AspNet.Razor 2.0.20715.0' to MyMvcProject.
Successfully uninstalled 'Microsoft.AspNet.Razor 2.0.20710.0'.
No updates available for 'Microsoft.Web.Infrastructure' in project 'MyMvcProject'.
Updating 'knockoutjs' from version '2.1.0' to '2.2.0' in project 'MyMvcProject'.
Successfully removed 'knockoutjs 2.1.0' from MyMvcProject.
Successfully installed 'knockoutjs 2.2.0'.
Successfully added 'knockoutjs 2.2.0' to MyMvcProject.
Successfully uninstalled 'knockoutjs 2.1.0'.
Updating 'jQuery.Validation' from version '1.9.0.1' to '1.10.0' in project 'MyMvcProject'.
Successfully removed 'jQuery.Validation 1.9.0.1' from MyMvcProject.
Successfully installed 'jQuery.Validation 1.10.0'.
Successfully added 'jQuery.Validation 1.10.0' to MyMvcProject.
Successfully uninstalled 'jQuery.Validation 1.9.0.1'.
Updating 'jQuery.UI.Combined' from version '1.8.20.1' to '1.9.0' in project 'MyMvcProject'.
Successfully removed 'jQuery.UI.Combined 1.8.20.1' from MyMvcProject.
Successfully installed 'jQuery.UI.Combined 1.9.0'.
Successfully added 'jQuery.UI.Combined 1.9.0' to MyMvcProject.
Successfully uninstalled 'jQuery.UI.Combined 1.8.20.1'.
Updating 'jQuery' from version '1.7.1.1' to '1.8.2' in project 'MyMvcProject'.
Successfully removed 'jQuery 1.7.1.1' from MyMvcProject.
Successfully installed 'jQuery 1.8.2'.
Successfully added 'jQuery 1.8.2' to MyMvcProject.
Successfully uninstalled 'jQuery 1.7.1.1'.
No updates available for 'EntityFramework' in project 'MyMvcProject'.
Updating 'DotNetOpenAuth.AspNet' from version '4.0.3.12153' to '4.1.3.12303' in project 'MyMvcProject'.
Successfully removed 'DotNetOpenAuth.AspNet 4.0.3.12153' from MyMvcProject.
Successfully removed 'DotNetOpenAuth.OAuth.Consumer 4.0.3.12153' from MyMvcProject.
Successfully removed 'DotNetOpenAuth.OAuth.Core 4.0.3.12153' from MyMvcProject.
Successfully removed 'DotNetOpenAuth.OpenId.RelyingParty 4.0.3.12153' from MyMvcProject.
Successfully removed 'DotNetOpenAuth.OpenId.Core 4.0.3.12153' from MyMvcProject.
Successfully removed 'DotNetOpenAuth.Core 4.0.3.12153' from MyMvcProject.
Successfully installed 'DotNetOpenAuth.Core 4.1.3.12303'.
Successfully added 'DotNetOpenAuth.Core 4.1.3.12303' to MyMvcProject.
Successfully installed 'DotNetOpenAuth.OpenId.Core 4.1.3.12303'.
Successfully added 'DotNetOpenAuth.OpenId.Core 4.1.3.12303' to MyMvcProject.
Successfully installed 'DotNetOpenAuth.OpenId.RelyingParty 4.1.3.12303'.
Successfully added 'DotNetOpenAuth.OpenId.RelyingParty 4.1.3.12303' to MyMvcProject.
Successfully installed 'DotNetOpenAuth.OAuth.Core 4.1.3.12303'.
Successfully added 'DotNetOpenAuth.OAuth.Core 4.1.3.12303' to MyMvcProject.
Successfully installed 'DotNetOpenAuth.OAuth.Consumer 4.1.3.12303'.
Successfully added 'DotNetOpenAuth.OAuth.Consumer 4.1.3.12303' to MyMvcProject.
Successfully installed 'DotNetOpenAuth.AspNet 4.1.3.12303'.
Successfully added 'DotNetOpenAuth.AspNet 4.1.3.12303' to MyMvcProject.
Successfully uninstalled 'DotNetOpenAuth.AspNet 4.0.3.12153'.
Successfully uninstalled 'DotNetOpenAuth.OAuth.Consumer 4.0.3.12153'.
Successfully uninstalled 'DotNetOpenAuth.OAuth.Core 4.0.3.12153'.
Successfully uninstalled 'DotNetOpenAuth.OpenId.RelyingParty 4.0.3.12153'.
Successfully uninstalled 'DotNetOpenAuth.OpenId.Core 4.0.3.12153'.
Successfully uninstalled 'DotNetOpenAuth.Core 4.0.3.12153'.
No updates available for 'DotNetOpenAuth.OAuth.Consumer' in project 'MyMvcProject'.
No updates available for 'DotNetOpenAuth.OAuth.Core' in project 'MyMvcProject'.
No updates available for 'DotNetOpenAuth.OpenId.RelyingParty' in project 'MyMvcProject'.
No updates available for 'DotNetOpenAuth.OpenId.Core' in project 'MyMvcProject'.
No updates available for 'DotNetOpenAuth.Core' in project 'MyMvcProject'.
PM> 

De esta forma, acabamos de ahorrarnos un buen rato buscando e instalando actualizaciones manualmente sobre el proyecto 🙂

La instrucción anterior realiza la actualización sobre una solución completa, pero podemos hilar un poco más fino. El siguiente comando restringe la instalación de actualizaciones al proyecto cuyo nombre especificamos como parámetro:

PM> update-package -ProjectName ProjectToUpdate

También podemos actuar de forma algo más prudente. Por defecto, Nuget instalará las versiones más recientes de todos los paquetes usados en el proyecto o solución, pero a veces, esto podría introducir errores en la aplicación, sobre todo si el salto de versiones es demasiado grande.

Por ello, podemos indicar que las actualizaciones se realicen en “modo seguro” añadiendo el switch -safe al comando, como se observa en el siguiente ejemplo:

PM> update-package -ProjectName AnotherProject –Safe

De esta forma conseguiremos que las actualizaciones no se realicen a la última versión disponible, sino a la última build dentro de la misma versión usada del componente. Es decir, una biblioteca que use un código de versionado del tipo major.minor.build.revision, sólo será actualizado hasta la versión major.minor.maxbuild de la misma.

Por ejemplo, si en un proyecto usamos un componente versión 1.0.1 y en el feed de Nuget existen las versiones 1.0.4, 1.1, y 2.0 de este componente, tras llamar a update-package a secas, este componente será actualizado a la versión 2.0. En cambio, si usamos –safe , se actualizará a la 1.0.4.

En definitiva, una característica de lo más útil y que espero que os ahorre bastante tiempo a los que aún no la conocíais.

Publicado en: Variable not found.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *