martes, 5 de julio de 2011

NuGet

Últimamente, mi universo .NET está creciendo con aportaciones de terceros, casi todas ellas open source. Por ejemplo, hay un componente de registro de errores llamando elmah que se a volver casi imprescindible en cualquier nuevo proyecto en el que embarque. De este modo, cada nuevo componente de terceros que incluyo en mis proyectos, conlleva como es lógico, cierto código en el fichero web.config, descargar los ensamblados correctos, configurarlo adecuadamente, etc.

Algunos de estos componentes son sencillos de configurar y se tarda más en explicarlo que en hacerlo, pero por otro lado, hay componentes que tienen dependencias terceros, demasiado código para incluir en el fichero web.config y no morir en el intento, etc.

Siendo así y para abstraernos de esta complejidad, podemos utilizar NuGet.

NuGet es, traducido literalmente de su página de codeplex (perdonar si mi traducción no es muy acertada) “un sistema libre de administración de paquetes enfocado a desarrolladores open-source para la plataforma .NET, con el propósito de simplificar el proceso de incorporar librerías de terceras partes en una aplicación .NET durante el desarrollo”.

Dicho de otro modo, “un sistema que nos permitirá incorporar en nuestras aplicaciones, componentes open-source de terceras partes, de forma automática y sin tener que conocer los entresijos de su instalación y configuración”.

Lo primero es instalar NuGet en nuestro Visual Studio, para ello podemos instalarlo desde el administrador de extensiones:

clip_image002

Una vez que la hemos instalado, tenemos las siguientes opciones disponibles en nuestra Visual Studio, desde el menú Herramientas:

clip_image004

La opción Package Manager Console nos abre una nueva ventana desde donde poder lanzar comandos para administrar la gestión de nuestros paquetes (tranquilo, que si no quieres lidiar con esta ventana, siempre podrás trabajar con una interfaz gráfica).

clip_image006

La opción Manage NuGet Packages es justamente la interfaz gráfica para los perezosos como yo que no quieren trabajar con la ventana de Package Manager Console. Por ejemplo, si buscamos Elmah en esta ventana, nos ofrece los siguientes resultados:

clip_image008

Como puedes ver, además de poder incorporar este componente a nuestro proyecto, el creador de Elmah se ha encargado de subir a NuGet distintas distribuciones de su proyecto para cubrir el mayor número de situaciones. Esta es otra de las ventajas de NuGet, que los creadores de librerías de terceros, crean sus propios paquetes (a veces varias como en nuestro ejemplo) y te ayudan a instalar su componente de la forma más transparente posible.

Por ejemplo, si seleccionamos la opción ELMAH on MS SQL Server Compact, podremos ver como también nos vamos a descargar de forma automática el runtime necesario para poder ejecutar MS SQL Server Compact, es decir, no tenemos que preocuparnos por esto, el creador del paquete decidió que había una dependencia de MS SQL Server Compact, y por ello se descargará junto a Elmah.

clip_image010

Después de haberlo instalado, la nueva situación de nuestra proyecto es la siguiente:

clip_image011

Se ha agregado una referencia a System.Data.SqlServerCe, se ha agregado un fichero marcador en App_Data (simplemente para informarnos de que creará el fichero elmah.sdf en este directorio), se ha agregado un fichero packages.config (que guarda la configuración de paquetes descargados e instalados desde NuGet en nuestra aplicación) y ha incluido el código necesario para ejecutar el componente elmah en nuestro fichero web.config (que te aseguro no son pocas líneas).

El fichero packages.config sería como sigue:

<?xml version="1.0" encoding="utf-8"?>

<packages>

  <package id="elmah.corelibrary" version="1.2" />

  <package id="elmah" version="1.2.0.1" />

  <package id="SqlServerCompact" version="4.0.8482.1" />

  <package id="elmah.sqlservercompact" version="1.2" />

</packages>


Ahora sólo queda probar nuestra aplicación creando una página sencilla que lance una excepción no manejada, con el propósito de que elmah la registre y ver que todo está funcionando correctamente.

Nuestro error no controlado:

clip_image013

Y nuestro módulo elmah funcionando sin apenas esfuerzo:

clip_image015

Pues llegados a este punto hay que reconocer, que instalar elmah sobre MS SQL Server Compact ha sido muy sencillo con NuGet.

Si ahora lo que quisiéramos es ver que paquetes tenemos instalados en nuestro proyecto, actualizarlos (que también está bien disponer de esta característica sin tener que visitar la página del autor) o incluso desinstalarlos, tendríamos que acceder de nuevo a la ventana de Manage NuGet Packages (que lo que hace es recuperar la información de packages.config).

clip_image017

En mi opinión, NuGet es una poderosa herramienta que viene a cubrir un hueco que tenía la plataforma .NET y que sí estaba cubierto en otras plataformas y lenguajes (sino me crees te puedes bajar el IDE eclipse para Java y ver cómo funciona maravillosamente su sistema de plug-ins).

Por último (y sólo con el propósito de al menos haberlo hecho una vez), vamos a ver como instalar este mismo paquete desde la consola de NuGet.

clip_image018

Intellisense, uoh!!

clip_image020

Pues la verdad es que casi se tarda menos desde la consola ;-)

Ahora imagina la cantidad de proyectos open-source de la comunidad .NET a tu alcance sólo con un par de clicks… pues tiene muy buena pinta

Un saludo!

1 comentario: