2012-03-28 65 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

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

相关问题