如何从CruiseControl.NET中的<msbuild>任务解决“只能指定一个项目”错误</msbuild>

时间:2009-01-22 14:28:47

标签: 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/>
    </tasks>
   </project>

但是,当项目运行时,它在构建日志中失败并显示此信息:

  

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(Debug)\ Artifacts; CCNetBuildCondition = ForceBuild; CCNetBuildDate = 2009- 01-22; CCNetBuildTime = 09:25:55; CCNetIntegrationStatus =未知; CCNetLabel = 3;   CCNetLastIntegrationStatus =失败; CCNetNumericLabel = 3; CCNetProject = AppBuilder 1.0(调试); CCNetProjectUrl = http://CISERVER01/ccnet;CCNetRequestSource=jstong;   CCNetWorkingDirectory = c:\ depot \ AppBuilder \ 1.0 \“”/ l:ThoughtWorks.CruiseControl.MsBuild.XmlLogger,ThoughtWorks.CruiseControl.MsBuild.dll; C:\ Program Files \ CruiseControl.NET \ server \ AppBuilder 1.0(Debug)\工件\的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 =未知; CCNetLabel = 3;   CCNetLastIntegrationStatus =失败; CCNetNumericLabel = 3; CCNetProject = AppBuilder 1.0(调试); CCNetProjectUrl = http://CISERVER01/ccnet;CCNetRequestSource=jstong;   CCNetWorkingDirectory = c:\ depot \ AppBuilder \ 1.0 \“”/ l:ThoughtWorks.CruiseControl.MsBuild.XmlLogger,ThoughtWorks.CruiseControl.MsBuild.dll; C:\ Program Files \ CruiseControl.NET \ server \ AppBuilder 1.0(Debug)\工件\的msbuild-results.xml“

如果我在命令行手动运行,我会收到类似的错误。

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

你能发现我的错误吗?或者这个版本的CruiseControl.NET(1.3.0.2918)是否与任务有关?

4 个答案:

答案 0 :(得分:24)

我想也许是工件目录路径中的空间。 MSBuild确实不喜欢空格,因为它认为它是参数之间的中断。您可以尝试从该路径中删除空间并查看会发生什么吗?

答案 1 :(得分:3)

为什么你的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>

答案 2 :(得分:1)

没有更多细节,因为您似乎没有指定一个项目/解决方案文件,而MSBuild假设一个。如果你有多个文件,MSBuild可以用作该目录中可能导致你的问题的项目文件.DO你有机会获得MSbuild .proj和.sln文件吗?还是两个解决方案文件?

答案 3 :(得分:0)

我有一个类似的问题,(亚历克斯说)删除我的空间确实解决了问题。然而,我遇到了另一种情况,即无法从名称中删除空格。在这种情况下,在名称周围添加引号可以解决我的问题。