Ir al contenido principal

Gestión de dependencias en .Net con nuget



Como mi compañero Juan Carlos Ballesteros ha hecho una introducción sobre la gestión de dependencias con Maven, hoy quiero contribuir con una introducción sobre la gestión de dependencias en .Net con NuGet.

Nuget apareció en el mundo de .Net en 2010, y desde Visual Studio 2012 viene instalado como una extensión:


Gracias a Nuget la gestión de paquetes y las dependencias entre los mismos es mucho más sencilla que antes. Ya no es necesario buscar el paquete manualmente, bajarlo y después referenciarlo, ahora Nuget realiza todo este trabajo con un solo click.

Además no sólo se pueden gestionar los paquetes de forma visual, sino que también se dispone de una consola llamada Package Manager Console en la que se pueden introducir comandos:


NuGet permite no sólo la instalación y gestión de dependencias en nuestros proyectos .Net, sino que además puede ejecutar scripts Powershell que ayuden a completar la inclusión de las dependencias: por ejemplo, para modificar un fichero de configuración que incluya una sección en la que se declara el componente recién introducido.

Cuando se instala NuGet como complemento de Visual Studio, aparece una nueva opción en el menú "Tools/Herramientas" que da acceso a la configuración de NuGet:

Si se accede a la opción "Package Manager Settings" se puede ver que en "Package Sources" se configuran los repositorios a los que se quiere acceder para encontrar los paquetes. Por defecto viene configurado el repositorio oficial de paquetes de Microsoft https://www.nuget.org/, que también puede visitarse por web, pero pueden configurarse repositorios alternativos, como por ejemplo, un repositorio en nuestra empresa que distribuya los componentes internos desarrollados para sus aplicaciones corporativas:


Y como lo mejor es verlo con un ejemplo, vamos a ello.

Supongamos que creamos una aplicación utilizando Visual Studio 2013 en ASP.Net MVC 5:


Hay que destacar que en las propias plantillas de proyectos de Microsoft, como ésta de MVC 5, ya se incluyen varios paquetes de NuGet que se instalan durante la creación del proyecto. 

Para ver las referencias de NuGet utilizadas por un proyecto, se utiliza el menú contextual "Manage NuGet Packages" sobre las referencias de dicho proyecto, o bien en la consola de comandos con "Get-Package -ListAvailable -Filter PackageName", que se comenta más adelante:



Aquí se puede ver que un paquete no son sólo referencias de tipo librería (dll) como por ejemplo "Json.NET", sino que también se pueden incluir como paquetes NuGet otro tipo de componentes, por ejemplo componentes propios de Microsoft (Microsoft ASP.NET MVC), librerías javascript como "jQuery" o frameworks CSS como "bootstrap".

Vamos a añadir a este proyecto el uso de Entity Framework de Microsoft para manejar las conexiones y entidades de Base de Datos:

1) Dentro de "Tools"/"NuGet Package Manager"/"Manage NuGet Packages for Solution", o bien con el menú contextual sobre las Referencias del proyecto, "Manage Nuget Packages..." se elige "Online" y el repositorio donde se encuentra el paquete de Entity Framework, en este caso, nuget.org Si hiciera falta, se puede utilizar el cuadro de búsqueda para buscar el paquete concreto a instalar:


2) Se pulsa "Install/Instalar" y NuGet procederá a la resolución de dependencias actuales dentro del proyecto e instalación del paquete seleccionado. A veces hay que aceptar el uso de licencias durante el proceso. En este caso, el paquete aparte de incluir las referencias necesarias modificará el fichero Web.config para añadir una nueva sección para Entity Framework:



Una vez terminado el proceso podremos ver las nuevas referencias "EntityFramework" y "EntityFramework.SqlServer" añadidas al proyecto, además de las secciones necesarias añadidas al "Web.config".

También se puede ver, añadido al proyecto, un fichero "packages.config" donde se puede ver todos los paquetes NuGet utilizados por el proyecto con sus versiones y versión de framework. Este fichero es utilizado por NuGet para saber tanto los paquetes ya instalados como para comprobar si hay actualizaciones para dichos paquetes:


Como se ha comentado anteriormente, en Visual Studio se dispone de la "Package Manager Console" que también permite la gestión de estas dependencias. Para el caso del ejemplo anterior, si en vez de utilizar el menú visual para instalar Entity Framework en nuestra aplicación MVC quisiéramos hacerlo por comando, sería tan sencillo como elegir la fuente y proyecto y después introducir el comando "Install-Package PackageName":


Esta consola de comandos es muy útil en determinadas situaciones, como por ejemplo, cuando se quiere instalar una versión específica de un paquete que no sea la última. Esto no es posible por el menú visual, pero sí por línea de comandos con el modificador "-Version" al comando "Install-Package".

Para instalar una actualización de un paquete, si está disponible, se verá en el apartado "Updates/Actualizaciones" dentro del "Nuget Package Manager"/"Manage Nuget Packages". Se pueden actualizar paquetes individuales o bien todos a la vez con el botón "Update All/Actualizar Todos". También se puede realizar la acción por la consola de comandos con "Update-Package PackageName":


Para desinstalar un paquete concreto, se selecciona dentro de la sección "Installed packages/Paquetes instalados" y se elige "Uninstall/Desinstalar", o bien con el comando "Uninstall-Package PackageName":


Y para finalizar, comentar que en nuget.org se encuentra no sólo el repositorio de todos estos paquetes, sino que se pueden buscar versiones anteriores de los mismos, consultar la documentación asociada y autores, y ver también el blog propio de nuget.org y documentación completa:




Entradas populares de este blog

Spring Boot: Página inicial con Bootstrap

  Este es el segundo artículo de la serie sobre Spring Boot que comenzamos hace dos semanas, si quieres ver el primero puedes acceder pulsando aquí . En el primer artículo vimos cómo descargar nuestro proyecto configurado para nuestros intereses y listo para ser importado en nuestro IDE (nosotros usaremos Eclipse ). Lo primero que vamos a hacer es importar el proyecto: File -> Import Existing Maven Projects Seleccionamos el fichero pom.xml en la carpeta donde lo hemos descomprimido y esperamos unos segundos Cuando acabe la importación, esta es la estructura que nos aparecerá: Con Spring Boot no necesitamos configurar el servidor, ya se encarga él de facilitarnos la vida. Lo único que tenemos que hacer es arrancar la clase BootApplication.java , que se encargará de arrancar Tomcat y dejar nuestra aplicación funcionando en el puerto 8080.  Y si todo fuera bien, podríamos acceder a través de la URL:  http://localhost:8080/ Pero ahora mismo tenemos un error de conexión c...

Redirección de puertos en Virtual Box

Continuando con mis anteriores "posts", vamos a terminar nuestro entorno de pruebas redirigiendo los puertos que nos interesan de la máquina virtual a nuestro PC. Con Virtual Box podemos configurar la red de diversas formas, una de ellas es redireccionar los puertos de la máquina virtual a la nuestra. Es bastante fácil y rápido de configurar, y lo que hace es que tengamos unos puertos destinados al entorno de desarrollo y otros para el entorno de pruebas. Ejemplo de uso:  - podemos usar el puerto 8080 para desarrollar en eclipse en nuestro entorno de desarrollo con Tomcat. - usaremos el puerto 80 para el Tomcat del entorno de pruebas Más adelante veremos cómo configurar las redes de virtual box para que sean máquinas independientes conectadas a nuestra red y más opciones. Vamos a hacer la redirección del puerto 22 para poder acceder a nuestra máquina virtual a través de uno de los clientes ssh más extendidos (y con nombre controvertido): ...

ASP.Net MVC: Subida de imágenes al servidor y recorte con Jcrop

Recientemente tuve que incluir, en un proyecto de ASP.Net MVC en el que estoy trabajando, un formulario donde un usuario podía subir su foto al perfil, y si el sistema detectaba que el tamaño de la imagen subida superaba el 100x100, había que recortarla. Esta premisa, aunque parece sencilla, encierra varios problemas técnicos a solucionar: 1) Subida de ficheros al servidor con ASP.Net MVC. 2) Recorte de foto y guardado. 3) Puntos a tener en cuenta: versiones de navegadores y otros aspectos técnicos. Vamos a ir viendo paso a paso cómo implementar esta práctica funcionalidad. Subida de ficheros al servidor con ASP.Net MVC Para subir ficheros al servidor desde la Vista, en Mvc se dispone de la clase System.Web.HttpPostedFileBase.  Para utilizarla, hay que seguir los pasos: - Declarar una propiedad de este tipo en el Model que se va a utilizar: public HttpPostedFileBase Fichero { get; set; } - Crear en la vista el formulario para realizar la subida ...