alessandro melchiori
() => melkio.OnStage();

Alessandro Melchiori

NuGet, le dll e il source control (2)

28 Oct 2011

Nel post precedente, abbiamo visto come sfruttare NuGet per evitare di committare tutti i packages (leggi dll) sul source control e integrarne il download da uno o più repository nel processo di build della nostra solution. Per far funzionare tutto il processo, anche se non menzionato nel post, è necessario che NuGet.exe sia registrato nel path, in modo che sia facilmente accessibile dai nostri pre-build events.

Chiacchierando con andrea, una soluzione alternativa potrebbe essere quella di creare una cartella “tools” per ogni solution, nella quale inserire l’eseguibile di nuget e far puntare a quell’eseguibile i pre-build events. In questo modo l’ingresso di un nuovo componente nel team o la messa in opera di un build server ha un impatto ancora minore: nessun presetting da soddisfare, un update dal source control, una build et voilà…tutto funziona.

Se il processo così descritto ci soddisfa, c’è una soluzione pronta all’uso, ancora più integrata e a minore impatto (grazie a roberto per la segnalazione): i NuGetPowerTools.

Questo package è composto da soli script di powershell che automatizzano le nostre esigenze…installiamolo con NuGet.

Il package arricchisce la nostra console PowerShell con alcuni nuovi comandi. Quello che fa al caso nostro è il comando

Enable-PackageRestore

Viene quindi creata, a livello di solution, una folder .nuget che contiene l’eseguibile NuGet.exe e un file nuget.targets contenente l’integrazione per/con msbuild.

A questo punto, ricordandosi di committare la folder .nuget, ad ogni rebuild della solution, ogni package necessario alla compilazione viene, ovviamente se necessario, downloadato e installato nel/i progetto/i.

Ottima soluzione, niente pre-build events e pronta all’uso.

Vi dirò però che dover committare la folder .nuget e l’eseguibile NuGet.exe non mi soddisfa appieno: risolve un problema (commit delle dll) per “crearne” un altro (commit dell’eseguibile). Ricordiamoci infatti che l’eseguibile di NuGet è passibile di aggiornamenti che, all’occorrenza, verrebbero commitatti integrando la “history” del file sul source control.

Buon nugetting a tutti!!!

Comments