2014-10-22 22 views
5

Ho un progetto che ha un pacchetto NuGet chiamato MSBuildTasks installato. Installa due file: MSBuild.Community.Tasks.targets e MSBuild.Community.Tasks.dll nella directory .build all'interno della directory della soluzione. Questo riferimento al pacchetto è stato aggiunto al file packages.config nella directory del progetto in modo tale che quando costruisco il progetto (e con le impostazioni di ripristino del pacchetto NuGet abilitate) ripristinerà il pacchetto che è ottimo perché allora posso distribuire il sorgente ad altri sviluppatori e costruirlo sul nostro server di build senza file mancanti ...MSBuildTasks e NuGet - Come posso ripristinare MSBuild.Community.Tasks.dll?

Tuttavia, il problema è che quando NuGet ripristina il pacchetto, non ripristina questi due file nella posizione prevista in cui era originariamente la prima volta installato con il comando Install-Package MSBuildTasks, che era nella directory $(SolutionDir)\.build. Invece, lo ha installato nella directory $(SolutionDir)\packages\MSBuildTasks.1.4.0.78\tools, quindi ora se desidero includere il file MSBuild.Community.Tasks.targets, devo fare assolutamente riferimento a questo percorso nel mio file .csproj o altro .targets. Questo presenta un problema poiché il numero di versione cambierà senza dubbio, richiedendo il lavoro manuale per correggere.

C'è un modo per ripristinare i file MSBuildTasks .targets e .dll nella posizione originale di $(SolutionDir)\.build dove si installa per la prima volta? Il comportamento attuale del ripristino nella directory dei pacchetti, mentre ha senso per altri pacchetti, sembra un bug per questo particolare pacchetto poiché non sarà in grado di conoscere il numero di versione della directory da includere negli altri .targets o. file csproj.

risposta

6

NuGet restore scaricherà solo i file nella directory dei pacchetti. Non farà altre modifiche.

Guardando il MSBuildTasks NuGet package i file aggiunti allo $(SolutionDir)\.build vengono aggiunti da uno script PowerShell. Questo script PowerShell non verrà eseguito durante il ripristino del pacchetto NuGet.

È necessario aggiungere $(SolutionDir)\.build al repository di controllo del codice sorgente.

+0

Grazie, questo funziona. –

+1

Ma il check-in delle DLL non ha lo scopo di utilizzare un gestore di pacchetti come NuGet in primo luogo? – Dov

+0

Se il pacchetto NuGet aggiunge file che non verrebbero ripristinati, la soluzione più semplice è quella di aggiungere quei file particolari al controllo del codice sorgente. Un'alternativa sarebbe un processo di pre-build leggermente più complicato in cui si ripristina e quindi si reinstalla il pacchetto NuGet MSBuildTasks. O il pacchetto NuGet stesso viene modificato per non richiedere questi file. –

0

Con le versioni più recenti 1.5+ il pacchetto Nuget non si installa nella directory della soluzione; questo ha funzionato per me però:

<PropertyGroup> 
    <MSBuildCommunityTasksPath>$(USERPROFILE)\.nuget\packages\msbuildtasks\1.5.0.235\tools</MSBuildCommunityTasksPath> 
</PropertyGroup> 

lo fa aggiungendo interessate hanno la versione, ma se qualcuno conosce un modo per rimuovere dover aggiornare la versione sul percorso quando si aggiorna il pacchetto che sarebbe fantastico.

Problemi correlati