Saltar al contenido

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript... y lo que venga ;)

17 años online

el blog de José M. Aguilar

Inicio El autor Contactar

Artículos, tutoriales, trucos, curiosidades, reflexiones y links sobre programación web
ASP.NET Core, MVC, Blazor, SignalR, Entity Framework, C#, Azure, Javascript...

¡Microsoft MVP!
martes, 27 de noviembre de 2012
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.

2 Comentarios:

Ramón Novoa dijo...

No puedo creer que esto existiera y yo estuviera todavia haciéndolo a mano :'( ... no se puede estar en todo...

Muchas gracias por darle difusión al truco, esto nos puede ahorrar mucho tiempo y problemas.

Y de paso aprovecho para darte la enhorabuena por el blog, estoy suscrito desde hace mucho tiempo.

Un saludo.

josé M. Aguilar dijo...

Pues ya ves, amigo, esto es un no parar :-) Me alegro de que te sea útil.

Y muchas gracias por tu comentario.

Un saludo!