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

teamcity building项目无法启动MSBuild.exe。路径中的非法字符,msbuild,teamcity,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的构建步骤:

我正试图在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的构建步骤:

构建路径为:Dev\Dev\project\myproj\myproj.csproj“ 工作目录留空 mbuild版本:microsoft.net framework 4.0 msbuild工具版本:4.0 运行平台:X86 目标:我已经尝试过构建“build”并将其留空 命令行参数留空

如果我创建一个命令行生成任务并运行上面的命令行,它就会工作。我不确定TeamCity中的命令行和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

尝试编辑生成配置,并从生成文件路径选项中删除引号

如果您有:

“Dev\Dev\project\myproj\myproj.csproj”

就让我们:

Dev\Dev\project\myproj\myproj.csproj


我希望这能有所帮助。

这个问题似乎非常相似:

除此问题外,请看:

关于这个问题,这个答案很有趣:

在ASP.NET项目中,添加基于文件的引用将添加 。刷新Bin文件夹中的文件。当项目位于源目录下时 控件,然后将此文件添加到源代码管理。*.dll.refresh 垃圾箱目录中的文件。每次添加外部 引用,您会在它旁边找到一个dll.refresh文件 dll.refresh文件是该规则的一个例外,它们应该被删除 这是你的web项目知道在哪里的唯一方法 它的引用是实时的

如果您在源代码管理中没有这一点,它可以解释您看到的问题。听起来错误消息可能具有误导性,这与生成计算机上未解决的引用有关

关于它从命令行工作的原因,当您从TeamCity构建时,它是否可能在构建之前清理输出目录?如果从命令行运行时,二进制文件已经从部分失败的构建中输出,并作为文件引用引用,这将成功


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

在TeamCity中,当您为路径或路径的一部分使用参数时,很容易将其粘贴到文件夹中,并且不会注意到其末尾有新行或回车符(我从痛苦的经历中发现)。它可能会在TeamCity中显示为参数值:

\Folder1\NewlyPastedInFolder \ExistingFolder\BuildScripts


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

< P>我从TeMeCase1中遇到这个错误消息,结果是解决方案文件中的一个空间导致了它。(VisualStudio构建步骤中引用的解决方案文件周围有双引号,这似乎没有帮助。也许是这些引号把它弄大了?)。我想有一些方法可以处理空格字符,但是在没有空格的情况下重命名解决方案文件更容易,这就解决了问题。

指定生成工作目录您是否检查了生成日志以了解团队city正在运行的确切命令?