2012-08-02 20 views
10

Sto provando a fare riferimento a MSBuildTasks da un file MSBuild e non sono sicuro di come farlo quando si utilizza NuGet per MSBuildTasks.Riferimento a MSBuildTasks dal pacchetto Nuget

Il riferimento dice di usare

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/> 

dopo aver installato MSBuildTasks utilizzando il file msi. Tuttavia, quando si installa da NuGet lo inserisce in una sottocartella che contiene la versione, quindi se aggiorno MSBuildTasks interromperà il percorso nel file di build. Qual è il modo migliore per fare riferimento a MSBuildTasks quando è installato tramite NuGet?

risposta

6

L'ho impostato di recente per resourcelib, utilizzando la versione 1.4.0.45 di MSBuildTasks. In questa versione l'aggiunta al progetto ha portato la DLL a essere collocata in una sottodirectory "Build", che sembra debba essere archiviata. Ho provato ad averlo scaricato automaticamente, ma se è referenziato in un file di progetto ha bisogno di essere lì dall'inizio

Per aggiungere al progetto, ho usato il seguente codice:

<PropertyGroup> 
    <MSBuildCommunityTasksPath>$(MSBuildProjectDirectory)\Build</MSBuildCommunityTasksPath> 
</PropertyGroup> 
<Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets"/> 

Qui MSBuildProjectDirectory viene utilizzato in modo che possa essere costruito con MSBuild sulla riga di comando.

+3

La risposta è stata molto utile, ma ho scoperto che la directory in cui NuGet colloca il file target è attualmente: '$ (SolutionDir) \ build', quindi, se le impostazioni di cui sopra non funzionano, vi consiglio di aggiornare la risposta. impostare la seguente: ' $ (SolutionDir) \ costruire' – providencemac

+2

sembra lo script PowerShell nel pacchetto NuGet che aggiunge la cartella '.build' è stato rimosso dalla versione 1.5, ma la 'Guida introduttiva. 'la guida suggerisce ancora di usarlo. Ho sollevato un [problema] (https://github.com/loresoft/msbuildtasks/issues/258). – Neo

5

Basta lanciare questo qui nel caso in cui qualcun altro affronta nuovamente questo problema. Sembra che quando si installa MSBuildCommunityTasks tramite NuGet, una soluzione .build venga aggiunta alla soluzione, che si consiglia di effettuare il check-in con il codice sorgente. Tuttavia, il file MSBuild.Community.Tasks.targets ha un elemento <MSBuildCommunityTasksPath>, che punta alla cartella c: \ Programmi (x86), che non è corretta. Questa cartella è valida quando si installa MsBuildCommunityTasks utilizzando un MSI. Questo non è valido nel caso di Nuget, che installa MsBuildCommunityTasks nella cartella dei pacchetti della soluzione. Così ho finito per la modifica del file .targets, e ha cambiato MSBuildCommunityTasksPath per puntare a:

<MSBuildCommunityTasksPath>$(SolutionDir)\packages\MSBuildTasks.1.4.0.56\tools</MSBuildCommunityTasksPath> 

Ancora nessun dadi. Così alla fine, ho solo cura di file di progetto web, e ha cambiato l'elemento di importazione per MSBuildCommunityTasks a questo:

<Import Project="$(SolutionDir)\packages\MSBuildTasks.1.4.0.56\tools\MSBuild.Community.Tasks.Targets"/> 

Questo funziona, dal momento che dice direttamente il progetto per cercare il file nella cartella .Targets pacchetti. Tenere presente che se si aggiorna la versione MSBuildTasks, sarà necessario modificare l'elemento Importa. Sono un noob di MsBuild, quindi se qualcuno può dirmi come automatizzare questo, sarebbe fantastico!

+0

Perché non avere ''? Forse la supervisione nella tua risposta. – HankCa

Problemi correlati