2012-03-28 68 views
6

我想在teamcity內部構建一個項目。它將完成TFS的簽出,並且這些文件在構建服務器上是本地的。如果我手動在服務器上運行此命令,它的工作原理:teamcity building project無法啓動MSBuild.exe。路徑中的非法字符

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

內的TeamCity我的MSBuild的構建步驟:

構建外商投資企業的路徑是:開發\開發\項目\的Myproj \的Myproj。的csproj」 工作目錄留空 mbuild版本:Microsoft .NET框架4.0 的MSBuild toolsversion:4.0 運行平臺:X86 目標:我曾嘗試打造 「建」 與留空 命令行PARAMS留空

如果我創建命令行構建任務並運行它的上述命令行。我不確定在teammcity中的命令行和msbuild任務之間有什麼區別。

編輯

我試圖在工作目錄中的一些變化:

項目的輸出路徑設置爲.. \建立\工具\的Myproj \

所以我有將teamcity中的工作目錄設置爲:Dev \ Dev \ project \ Build \ Tools \ myproj \

這沒有幫助。

下面是從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

指定建立工作目錄 – KMoraz 2012-03-28 15:37:52

+0

你檢查生成日誌的確切命令隊伍城市runnng? – 2012-03-28 18:07:18

回答

1

嘗試編輯構建配置,並從構建文件路徑選項刪除引號。

如果您有:

「開發\開發\項目\的Myproj \ myproj.csproj」

就讓:

開發\開發\項目\的Myproj \ myproj.csproj

我希望這個幫助。

0

這個問題似乎很相似:

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

除了這個問題,一起來看看:

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

在這個問題上,這個答案是利益:

在一個ASP.NET項目中,addi ng基於文件的引用將在Bin文件夾中添加一個 .refresh文件。當項目在源 控制下時,此文件將被添加到源代碼管理。 * .dll.refresh 廢棄bin目錄的文件。每當您添加一個外部參考文件 時,您都會在其旁邊找到一個dll.refresh文件。這些 dll.refresh文件是一個例外,他們應該去 到源代碼控制。它的唯一方式就是您的網絡項目將知道其參考文件的生效位置。

如果您在源代碼管理中沒有這個功能,它可以解釋您所看到的問題。這聽起來像是錯誤消息可能會引起誤解,並且這與引用未在構建機器上解析有關。

至於爲什麼它的命令行工作,是有可能,當你從TeamCity的建築是建造之前清潔的輸出目錄?如果從命令行運行時,二進制文件已經從被引用爲文件引用的部分失敗的構建中輸出,則這將成功。

要確定,如果是這樣的話 - 如果你做一個完全乾淨的檢出,然後運行命令行的MSBuild的一步,它仍然成功?

1

在TeamCity中,當您爲路徑或部分路徑使用參數時,很容易將其粘貼到文件夾中,並且不會注意到它在最後具有新行或回車符(因爲我發現從痛苦的經歷)。它可以在TeamCity的出現,作爲一個參數的值:

\ Folder1中\ NewlyPastedInFolder \ ExistingFolder \ BuildScripts

什麼看起來像一個字包裹的價值實際上是在中間回車的參數。通過編輯來檢查它,並查看是否可以刪除該字符以使其成爲單行值。

相關問題