如何解决;只能指定一个项目";来自<;msbuild>;CruiseControl.NET中的任务

如何解决;只能指定一个项目";来自<;msbuild>;CruiseControl.NET中的任务,msbuild,cruisecontrol.net,Msbuild,Cruisecontrol.net,我试图在CruiseControl.NET版本1.3.0.2918中使用这个任务,并且非常简单: <project name="AppBuilder 1.0 (Debug)"> <workingDirectory>c:\depot\AppBuilder\1.0\</workingDirectory> <triggers/> <tasks> <msbuild/> </tas

我试图在CruiseControl.NET版本1.3.0.2918中使用这个任务,并且非常简单:

  <project name="AppBuilder 1.0 (Debug)">
    <workingDirectory>c:\depot\AppBuilder\1.0\</workingDirectory>
    <triggers/>
    <tasks>
      <msbuild/>
    </tasks>
   </project>

c:\depot\AppBuilder\1.0\
但是,项目运行时失败,生成日志中有以下信息:

MSBUILD:错误MSB1008:仅一个 可以指定项目。开关:1.0

对于开关语法,键入“MSBuild” /“帮助”

当我查看ccnet.log文件时,我发现:

正在工作中启动进程[C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe] 目录[c:\depot\AppBuilder\1.0],带参数[/nologo”/p:CCNetArtifactDirectory=c:\Program Files\CruiseControl.NET\server\AppBuilder 1.0(调试)\Artifacts;CCNetBuildCondition=ForceBuild;CCNetBuildDate=2009-01-22;CCNetBuildTime=09:25:55;CCNetIntegrationStatus=Unknown;CCNetLabel=3; CCNetLastIntegrationStatus=失败;CCNetNumericLabel=3;CCNetProject=AppBuilder 1.0(调试);CCNetProjectUrl=; CCNetWorkingDirectory=c:\depot\AppBuilder\1.0\“”/l:ThoughtWorks.CruiseControl.MsBuild.XmlLogger,ThoughtWorks.CruiseControl.MsBuild.dll;c:\Program Files\CruiseControl.NET\server\AppBuilder 1.0(调试)\Artifacts\MsBuild results.xml“]

由此推断,msbuild在正确的工作目录中运行,传递给它的命令行为:

/nologo”/p:CCNetArtifactDirectory=C:\Program Files\CruiseControl.NET\server\AppBuilder 1.0(Debug)\Artifacts;CCNetBuildCondition=ForceBuild;CCNetBuildDate=2009-01-22;CCNetBuildTime=09:25:55;CCNetIntegrationStatus=Unknown;CCNetLabel=3; CCNetLastIntegrationStatus=失败;CCNetNumericLabel=3;CCNetProject=AppBuilder 1.0(调试);CCNetProjectUrl=; CCNetWorkingDirectory=c:\depot\AppBuilder\1.0\”/l:ThoughtWorks.CruiseControl.MsBuild.XmlLogger,ThoughtWorks.CruiseControl.MsBuild.dll;c:\Program Files\CruiseControl.NET\server\AppBuilder 1.0(调试)\Artifacts\MsBuild results.xml

如果我在命令行手动运行此命令,我会得到一个类似的错误

在我看来,没有将正确的命令行传递给MSBuild可执行文件


你能发现我的错误吗?或者这个版本的CruiseControl.NET(1.3.0.2918)在任务方面是否已损坏

为什么您的msbuild标记为空?它应该类似于:

<msbuild>
  <executable>C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe</executable>
  <workingDirectory>C:\dev\ccnet</workingDirectory>
  <projectFile>CCNet.sln</projectFile>
  <buildArgs>/noconsolelogger /p:Configuration=Debug /v:diag</buildArgs>
  <targets>Build;Test</targets>
  <timeout>900</timeout>
  <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe
C:\dev\ccnet
CCNet.sln
/noconsolelogger/p:Configuration=Debug/v:diag
建设;试验
900
C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll

没有更多详细信息,因为您似乎没有指定让MSBuild假定为项目/解决方案文件的项目/解决方案文件。如果MSBuild能够将多个文件用作该目录中可能导致您出现问题的项目文件。是否有MSBuild.proj和.sln文件?还是两个解决方案文件?

我想可能是您在工件目录路径中的空间。MSBuild确实不喜欢空格,因为它认为空格是参数之间的分隔符。你能试着从路径中删除空间,看看会发生什么吗?

我也遇到了类似的问题,(Alex说的)删除空间确实解决了问题。不过,我确实遇到了另一种情况,即无法从名称中删除空格。在本例中,在名称周围添加引号解决了我的问题。

为了简单起见,我在问题中对其进行了精简--即使我有如您所示的标记,也会收到相同的错误消息。如果看不到实际的MSBuild任务块,将无法进行诊断。指定的目录中只有一个.sln。如果我打开一个cmd窗口并在没有参数的情况下运行MSBuild,那么它生成时不会出错。只有当我添加cc.net添加的所有额外参数时,它才会失败。Alex,你肯定了解了一些东西。这似乎是参数列表的最后一部分(“/l:…”),它混淆了MSBuild。我总是让cc.net选择artifacts目录。我假设这是某个配置属性?在这里回答我自己的评论问题——似乎in可以用来控制它。问题似乎不仅是工件目录路径中的空格,而且是日志记录器路径中的空格。一旦我消除了这些东西,它们似乎就起作用了。我将对这个答案进行投票,并将其标记为被接受的答案——感谢您的帮助。MSBuild绝对不喜欢空格。我遇到了与您在测试生成文件中某些目标的属性重写时相同的错误。一旦我消除了道路上的空隙,一切都正常了。我喜欢消除“程序文件”中的空间,这正是目前让我头疼的地方,不幸的是有点麻烦。这令人沮丧:(