martedì 27 marzo 2012

.Net e la gestione delle dipendenze

Ultimamente sto lavorando ad un progetto molto frammentato, costituito da un motore a cui si possono agganciare tanti plugin. Per tenere insieme questa massa di progetti (siamo ormai a 30), visto che ancora le interfacce sono in movimento, la soluzione più veloce ed immediata è stata quella di mettere tutto in un solo calderone, cioè una sola solution.
Questa gestione non risulta affatto pratica, anche perché il "compila soluzione" cambia la data (e quindi l'hash md5) anche alle librerie che non si sono toccate.
Come fare quindi a gestire in maniera semplice un repository in .Net?
La prima idea è stata quella di mettere le dipendenze in una directory condivisa a tutti gli sviluppatori dell'azienda. E' però necessario gestire l'albero delle versioni e creare per ogni versione di libreria rilasciata una directory, in modo da preservare tutte le versioni. Idea quindi buona ma un po' macchinosa.
Visto che in Java usiamo Archiva, ci siamo messi alla ricerca di un equivalente in .Net, che magari si fosse integrato in Visual Studio. Il tool che abbiamo trovato è stato NuGet.

"Nuget è un'estensione di VisualStudio 2010 che semplifica l'aggiunta, la modifica e l'eliminazione di librerie e tools nei progetti VisualStudio che usano il Framework .Net"


In pratica permette di accedere ad una repository centralizzata da cui attingere le dipendenze ai vari tool, lo stesso concetto di repository manager che troviamo in Maven.
Guardando la documentazione ho anche scoperto che NuGet permette di creare il proprio server, da pubblicare nella propria Intranet per ostare i pacchetti privati.
Questo è esattamente ciò di cui avevo bisogno! Certo, se potessi usare Maven anche con .Net sarei più felice, ma purtroppo il progetto NPanday è ancora nell'incubatore Apache...