2013-11-01 10 views
6

Uso gli eventi Pre-/Post-build nei file di progetto VS2012 per eseguire attività di compilazione. Questo funziona perfettamente bene localmente, ma ho un problema eseguendolo dal nostro server di build TFS 2012.Project TargetDir su server di costruzione TFS

Localmente il $(TargetDir) per ogni progetto è impostato sulla propria cartella /bin.

Sul server di compilazione tuttavia è impostato su una singola cartella /bin al di fuori della cartella radice della soluzione in cui vengono consolidati tutti i file binari creati.

Questo non è affatto quello che voglio!
Voglio solo che il server di build si comporti allo stesso modo del mio build VS2012.
Non sembra esserci alcuna impostazione nel modello di build che mi permetta di modificare questo.

Qualcuno può dirmi come posso fare in modo che il server di build restituisca i file binari in una cartella separata /bin per ciascun progetto?

(FYI, il server di build è impostato per creare il file .sln, non qualche ulteriore script MSBuild.)

risposta

2

Questo accade perché MSBuild e TFSBuild sono due prodotti diversi - sulla macchina locale MSBuild viene utilizzato per costruire la vostra progetti.

Un metodo che ho usato per aggirare questo problema è quello di essere un po 'più prolisso e utilizzare una combinazione di ProjectDir e ConfigurationName. Ecco un esempio reale dove sto copiare alcuni file di configurazione:

robocopy "$ (ProjectDir) bin \ $ (ConfigurationName)" "... cartella di destinazione ..." * .config

(si noti che ho rimosso il percorso di destinazione, non è stato essenziale per l'esempio)

questo funziona indipendentemente dal fatto che il gruppo è mirato per AnyCPU o x86/64, a causa della convenzione di Microsoft di includere una barra come parte del nome della cartella.

+0

Il fatto è che TFSBuild non crea una cartella bin nel $ (ProjectDir) affatto. Costruisce solo nella cartella obj e nella cartella bin consolidata che si trova all'esterno di $ (SolutionDir) e $ (ProjectDir). Tuttavia, ho usato $ (TargetDir) per ora per individuare la cartella bin consolidata. Grazie per il tuo contributo. –

7

TFS e Visual Studio utilizzano entrambi msbuild per creare la soluzione, tuttavia la struttura delle cartelle dell'output di compilazione è diversa. Il motivo per cui l'output non è nella stessa struttura di VS è perché il modello di build TFS sovrascrive la proprietà $ (OutDir) in modo che punti alla cartella "binari" sull'agent build.

In TFS 2012/.NET 4.5 è possibile controllare questo comportamento passando un argomento msbuild nella tua definizione di compilazione /p:GenerateProjectSpecificOutputFolder=true

Vedi this blog per ulteriori informazioni

+0

Questo è quasi ciò di cui ho bisogno. Comunque il mio evento PRE-BUILD è ancora rotto, sembra che la specifica cartella bin \ Debug dei progetti sia "riempita" troppo tardi. Ho impostato correttamente le dipendenze e funziona sulla mia macchina. Qualche idea? –