2012-03-28 7 views
6

Sto cercando di creare un progetto all'interno di teamcity. Effettua il checkout di TFS e i file sono localmente sul server di build. Se faccio funzionare manualmente il comando build sul server funziona:progetto di costruzione teamcity Impossibile avviare MSBuild.exe. Caratteri non ammessi nel percorso

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\msbuild.exe C:\TeamCity\buildAgent\work\3446a5bd436eea87\Dev\Dev\project\myproj\myproj.csproj /t:build 

Entro TeamCity Ho un passaggio di generazione di MSBuild:

il percorso fie build è: Dev \ Dev \ progetto \ MyProj \ MyProj. csproj" directory di lavoro viene lasciato vuoto versione mbuild: Microsoft .NET framework 4.0 msbuild toolsversion: 4.0 piattaforma run: X86 obiettivi: ho cercato di compilazione "costruire" e lasciato vuoto riga di comando Parametri lasciato vuoto

se creo un'attività di compilazione della riga di comando ed eseguo la riga di comando sopra, funziona. Non sono sicuro quali differenze ci siano tra la riga di comando e l'attività msbuild all'interno di teammcity.

EDIT

ho provato alcune variazioni sulla directory di lavoro:

il percorso di output di progetto è impostato per .. \ costruire \ Tools \ MyProj \

così ho imposta la directory di lavoro in teamcity su: Dev \ Dev \ project \ Build \ Tools \ myproj \

Questo non ha aiutato.

Ecco l'uscita esatta da TeamCity:

Starting: C:\TeamCity\buildAgent\plugins\dotnetPlugin\bin\JetBrains.BuildServer.MsBuildBootstrap.exe /workdir:C:\TeamCity\buildAgent\work\3446a5bd436eea87\Dev\Dev\project\Build\Tools\myproj /msbuildPath:C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe 
in directory: C:\TeamCity\buildAgent\work\3446a5bd436eea87\Dev\Dev\project\Build\Tools\myproj 


Failed to start MSBuild.exe. Illegal characters in path. 
System.ArgumentException: Illegal characters in path. 
    at System.IO.Path.CheckInvalidPathChars(String path) 
    at System.IO.Path.IsPathRooted(String path) 
    at JetBrains.TeamCity.Utils.FileUtil.MakeFullPath(String path, String workDir) in   c:\BuildAgent\work\c2314fd21f15dc97\src\Utils\src\FileUtil.cs:line 48 
    at JetBrains.BuildServer.MSBuildBootstrap.RunArgs.get_ProjectFile() in  c:\BuildAgent\work\c2314fd21f15dc97\src\MSBuildBootstrap\src\RunArgs.cs:line 156 
    at  JetBrains.BuildServer.MSBuildBootstrap.Impl.MSBuildBootstrapFactory.Create(IClientRunArgs  args) in  c:\BuildAgent\work\c2314fd21f15dc97\src\MSBuildBootstrap.Core\src\Impl\MSBuildBootstrapFact ory.cs:line 29 
    at JetBrains.BuildServer.MSBuildBootstrap.Program.Run(String[] _args) in  c:\BuildAgent\work\c2314fd21f15dc97\src\MSBuildBootstrap\src\Program.cs:line 67 
+0

Specificare la directory di lavoro di build – KMoraz

+0

Avete controllato il log di compilazione per il comando esatto che team city sta eseguendo? –

risposta

1

provare a modificare il configurazione di generazione e rimuovere le virgolette dal percorso del file Corporatura opzione.

Se si dispone di:

"Dev \ Dev \ progetto \ MyProj \ myproj.csproj"

Basta fare:

Dev \ Dev \ progetto \ MyProj \ myproj.csproj

Spero che questo aiuto.

0

Questa domanda sembra molto simile:

What's the illegal character in this string ? I'm getting MSBUILD : error MSB3095

In aggiunta a questa domanda, dare un'occhiata a:

What is a dll.refresh file in ASP.Net?

Su questa questione, questa risposta è di interesse:

In un progetto ASP.NET, addi ng un riferimento basato su file aggiungerà un file .refresh nella cartella Bin. Quando il progetto è sotto il controllo di origine , questo file viene quindi aggiunto al controllo del codice sorgente. * .dll.refresh file che sporcano la directory bin.Ogni volta che aggiungi un riferimento esterno , troverai un file dll.refresh proprio accanto ad esso. Questi file dll.refresh costituiscono un'eccezione alla regola e devono essere sostituiti da nel controllo del codice sorgente. È l'unico modo in cui il tuo progetto web saprà dove vivono i riferimenti .

Se non si dispone di questo nel controllo del codice sorgente, potrebbe spiegare il problema che si sta vedendo. Sembra che il messaggio di errore sia potenzialmente fuorviante e questo è legato a un riferimento non risolto sulla macchina di compilazione.

Per quanto riguarda il motivo per cui funziona dalla riga di comando, è possibile che quando si costruisce da TeamCity si stia pulendo la directory di output prima di costruire? Se quando si esegue dai binari della riga di comando sono già stati generati dalla build parzialmente fallita a cui si fa riferimento come riferimenti di file, ciò avrebbe esito positivo.

Per identificare se questo è il caso - se si esegue un checkout completamente pulito e quindi si esegue il passaggio MSBuild dalla riga di comando, continua comunque?

1

In TeamCity, quando si utilizzano i parametri per il percorso o una parte del percorso, è facile incollare in una cartella e non notare che ha una nuova riga o ritorno a capo alla fine (come ho trovato dall'esperienza dolorosa). Potrebbe presentarsi in TeamCity come il valore di un parametro:

\ Cartella1 \ NewlyPastedInFolder \ ExistingFolder \ BuildScripts

Ciò che appare come un valore di parola-avvolta è in realtà un parametro con un ritorno a capo nel mezzo. Controllalo modificandolo e verifica se è possibile eliminare il carattere per trasformarlo in un valore a riga singola.

Problemi correlati