2010-07-01 12 views
10

ho un progetto che ha un evento di post-generazione che xcopies una DLL per una certa directory:MSBuild'ing un progetto con un post-generazione evento xcopy

xcopy "$ (TargetDir) $ (TargetName) .dll "" $ (SolutionDir) .. \ UdpLocationService \ bin \ Plugin \ "/ d/y xcopy" $ (TargetDir) $ (TargetName) .pdb "" $ (SolutionDir) .. \ UdpLocationService \ bin \ Plugin \ "/ d/y

Tuttavia, ho CruiseControl.NET impostato come un server di build e MSBuild non riesce a costruire quel progetto a causa di questo evento xcopy post-generazione:

MSB3073: il comando "xcopy" C: \ Build \ Services \ Windows \ VehicleServer \ Plugins \ Payload \ bin \ Debug \ Payload.dll "" Non definito .. \ UdpLocationService \ bin \ Plugins \ "/ d/y xcopy "C: \ Build \ Services \ Windows \ VehicleServer \ Plugins \ Payload \ bin \ Debug \ Payload.pdb" "Non definito .. \ UdpLocationService \ bin \ Plugin \"/d/y "terminato con codice 4. in Microsoft.Common.targets (3397, 13)

Qualche suggerimento per farlo? Grazie,

Justin

risposta

4

procedere come segue:

  • scaricare il file del progetto (ad esempio * .csproj)
  • Aprire il file di progetto per la modifica
  • Trova il bersaglio AfterBuild
  • Separa le due invocazioni di XCopy in due compiti Exec distinti
  • Salva le tue modifiche e Reloa d il file di progetto
+0

Grazie, che ha fissato il primo errore, ma non la seconda: MSB3073: Il comando "xcopy "C: \ costruire \ Services \ Windows \ VehicleServer \ Plugins Payload \ bin \ Debug \ Payload.pdb"" \ * Non definito * .. \ UdpLocationService \ bin \ Plugin \ "/ d/y" terminato con codice 4. in Microsoft.Common.targets (3397, 13) – Justin

+0

Devo anche aggiungere che non vi sono AfterBuild o exec nel file csproj.Ecco come appare: xcopy "$ (TargetDir) $ (TargetName) .dll" "$ (SolutionDir) .. \ UdpLocationService \ bin \ Plugins \"/d/y xcopy "$ (TargetDir) $ (TargetName) .pdb" "$ (SolutionDir) .. \ UdpLocationService \ bin \ Plugins \"/d/y Justin

+0

Quale versione di Visual Studio stai usando? –

22

Ho appena avuto lo stesso problema con TeamCity.

Il problema qui è la proprietà $ (SolutionDir) nel file di build. Non l'hai definito nella tua chiamata a MsBuild (ecco perché vedi la parola non definita nell'output).

chiamata msbuild con l'insieme di proprietà, in questo modo:

msbuild myproject.csproj /property:SolutionDir="solution directory"\ 

Dove "directory soluzione" è la directory contenente il file di soluzione. Nota la barra finale, ti servirà per assicurarti che il percorso sia formato correttamente.

+0

oppure puoi includere la barra finale all'interno delle virgolette doppie - ricorda di fuggire con un'altra barra rovesciata. Quindi nel mio caso, la chiamata sarebbe msbuild myproject.csproj/property: SolutionDir = "% teamcity.build.checkoutdir% \\" –

7

Ho fissato questo per i problemi con il pacchetto NuGet Microsoft.SqlServer.Compact (che aggiunge uno script di post-generazione simile), con l'aggiunta di:

<SolutionDir Condition="'$(SolutionDir)'=='' or '$(SolutionDir)'=='*Undefined*'">..\</SolutionDir> 

proprio sopra la <PostBuildEvent>. Ti consigliamo di regolare il percorso relativo per abbinare il layout del progetto.

+2

Questo errore può verificarsi quando si crea un progetto anziché una soluzione. Quando ciò accade, $ (SolutionDir) è in realtà * non definito * e la soluzione sopra riportata aggira la limitazione. – Philippe

Problemi correlati