teamcity building project无法启动MSBuild.exe。路径中的非法字符

时间:2012-03-28 11:01:31

标签: msbuild teamcity

我正在尝试在teamcity中构建一个项目。它将执行TFS的检出,文件在构建服务器上本地。如果我在服务器上手动运行build命令,它可以工作:

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的构建步骤:

构建fie路径是:Dev \ Dev \ project \ myproj \ myproj.csproj“ 工作目录留空 mbuild版本:microsoft .net framework 4.0 msbuild toolsversion:4.0 运行平台:X86 目标:我尝试构建“构建”并留空 命令行参数留空

如果我创建一个命令行构建任务并运行上面的命令行就可以了。我不确定teammcity中命令行和msbuild任务之间有什么区别。

修改

我在工作目录上尝试了一些变体:

项目中的输出路径设置为.. \ Build \ Tools \ 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

4 个答案:

答案 0 :(得分:1)

尝试编辑构建配置并从构建文件路径选项中删除引号。

如果你有:

“开发\开发\项目\的Myproj \ myproj.csproj”

让我们:

开发\开发\项目\的Myproj \ myproj.csproj

我希望这有帮助。

答案 1 :(得分:1)

在TeamCity中,当您使用路径的参数或路径的一部分时,很容易粘贴到文件夹中而不会注意到它最后有一个新行或回车符(正如我从痛苦的经历)。它可以在TeamCity中显示为参数的值:

\ Folder1中\ NewlyPastedInFolder  \ ExistingFolder \ BuildScripts

看起来像单词包装的值实际上是一个在中间带回车符的参数。通过编辑来检查它,看看是否可以删除该字符以使其成为单行值。

答案 2 :(得分: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项目中,添加基于文件的引用将添加一个   Bin文件夹中的.refresh文件。当项目在源头时   然后,将此文件添加到源代码管理中。 * .dll.refresh   垃圾箱目录的文件。每次添加外部   参考,你会在它旁边找到一个dll.refresh文件。这些   dll.refresh文件是规则的一个例外,它们应该去   进入源控制。它是您的Web项目知道在哪里的唯一方式   其参考文献现场直播。

如果您在源代码管理中没有此功能,则可以解释您遇到的问题。听起来好像错误消息可能会产生误导,这与在构建计算机上未解析的引用有关。

关于它为什么从命令行工作,是否有可能在从TeamCity构建时,它是在构建之前清理输出目录?如果从命令行运行时,二进制文件已从部分失败的构建中输出,这些构建引用为文件引用,则会成功。

要确定是否是这种情况 - 如果您执行完全干净的结帐,然后从命令行运行MSBuild步骤,它是否仍然成功?

答案 3 :(得分:0)

我遇到了来自TeamCity的这条错误消息,结果发现解决方案文件中有一个空间导致它(Visual Studio Build Steps中引用的解决方案文件周围有双引号,这似乎没有帮助。也许是那些引用它的引用?)。我想有一些方法来处理空格字符,但是更容易重命名没有空格的解决方案文件,这解决了问题。