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.
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.
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
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.
Ahora si intentamos añadir un paquete NuGet a un proyecto, aparece nuestro origen de datos junto con el de 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.
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.
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 NuGetNuGet 2 Essentials
Como puedo crear .nukpg con mi proyecto usando el Nuget Package Explorer
ResponderEliminarComo puedo crear .nukpg con mi proyecto usando el Nuget Package Explorer
ResponderEliminarHola Juan
EliminarEs exactamente lo que explico en el artículo.
saludos
Cómo conseguir un nuget de pollo?
ResponderEliminarNo lo necesitas. Ya eres un nuget de pollo :)
ResponderEliminar