Cómo crear un paquete NuGet y publicarlo en un repositorio local

jueves, 8 de mayo de 2014

NuGet logo

Introducción

En ocasiones puede resultar interesante para compartir librerías reutilizables entre aplicaciones y tener un repositorio local de paquetes NuGet. Vamos a ver un ejemplo de como podemos hacerlo.

Vamos a crear un paquete sobre converters para XAML, nos crearemos dos proyectos uno para WPF y otro para Windows 8 y así vemos como podemos publicar un solo paquete donde se incluye una librería para cada Target Framework.
Al descargar el paquete automáticamente NuGet nos creara una referencia al proyecto que corresponda del paquete segun el Target Framework del proyecto donde lo estamos añadiendo.

Creando libreria WPF

Creamos el proyecto de tipo Class Library para .Net Framework 4.5 y lo llamamos XAMLConverters.WPF45

Modificamos el namespace por defecto dejando solo XAMLConverters para que las versiones de la dll para cada Target Framework tengan el mismo namespace.

Tenemos que añadir referencias necesarias para WPF que son PresentationCore y PresentationFramework.

Y creamos una clase NullObjectToVisibiltyConverter, que es un converter que devuelve Visibility.Visible si el objeto que recibe por parametro no es nulo y Visibility.Collapsed si es nulo.

public class NullObjectToVisibiltyConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return (value == null) ? Visibility.Collapsed : Visibility.Visible;
    }

    public object ConvertBack(object value, Type targetType,  object parameter, CultureInfo culture)
    {
        return null;
    }
}

Creando libreria Windows 8.1

Creamos el proyecto de tipo Class Library (Windows Store App) y lo llamamos XAMLConverters.W81

Modificamos el namespace por defecto dejando solo XAMLConverters para que las versiones de la dll para cada TargetFramework tengan el mismo namespace.

Y creamos una la NullObjectToVisibiltyConverter para Windows 8.1

public class NullObjectToVisibiltyConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return (value == null) ? Visibility.Collapsed : Visibility.Visible;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        return null;
    }
}

Creando el repositorio local

Para crear el repositorio NuGet local , nos creamos una carpeta donde nos interese tenerlo, yo lo he creado en C:\LocalNuGetFeed.

En Visual Studio nos vamos al menú Tools/ NuGet Package Manager/Package Manager Settings, vamos a Package Source, aquí vemos el origen por defecto de NuGet y desde aquí podemos añadir un nuevo origen.
Añadimos uno nuevo y le damos un nombre y seleccionamos la ruta donde se encuentra.

Crear origen de paquetes NuGet

Ahora si intentamos añadir un paquete NuGet a un proyecto, aparece nuestro origen de datos junto con el de NuGet.

Nuevo origen de paquetes NuGet

Creando el paquete

Para crear el paquete vamos a usar la herramienta NuGet Package Explorer que podéis descargar aquí.

Una vez instalada, ejecutamos y le indicamos que queremos crear un nuevo paquete.

Aparece una ventana con campos a rellenar donde ponemos la información que consideremos sobre nuestro paquete.

crear nuevo paquete NuGet

Ahora compilamos nuestro proyecto para WPF4.5 y para W81. En el panel de la derecha le indicamos con botón derecho que queremos crear una carpeta lib.

La forma de añadir las librería clasificadas cada una con su Target Framework es crear carpetas especificas para cada uno. Si hacemos click con el botón derecho sobre lib aparece un menú donde creamos una carpeta para .net y especificamos la version 4.5 y creamos otra para Windows Store version Windows 8.1.


Publicando el paquete

Ahora solo nos queda publicarlo, como queremos publicarlo en nuestro repositorio local, solo tenemos que guardarlo en la carpeta local para el repositorio con el mení File/Save as.

Ahora ya podemos añadir nuestro paquete NuGet a cualquier proyecto WPF y Windows 8.1.


Resumen

Hemos visto como podemos crear un único paquete NuGet con librerias para diferentes target frameworks y cómo publicarlo en un repositorio local.

Este repositorio puede estar en local o en una carpeta de red, una buena idea es tener esta carpeta en el TFS y cada componente del equipo puede tener un repositorio local sincronizado en todo momento. De esta forma se puede distribuir librerías o frameworks reutilizables a nivel de empresa para cada una de sus aplicaciones.

Libros Relacionados

Pro NuGet

NuGet 2 Essentials

5 comentarios:

  1. Como puedo crear .nukpg con mi proyecto usando el Nuget Package Explorer

    ResponderEliminar
  2. Como puedo crear .nukpg con mi proyecto usando el Nuget Package Explorer

    ResponderEliminar
    Respuestas
    1. Hola Juan

      Es exactamente lo que explico en el artículo.

      saludos

      Eliminar
  3. Cómo conseguir un nuget de pollo?

    ResponderEliminar
  4. No lo necesitas. Ya eres un nuget de pollo :)

    ResponderEliminar