views:

2722

answers:

3

I'm trying to use the task in CruiseControl.NET version 1.3.0.2918 with a rather straight forward :

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

However, when the project is run it fails with this information in the build log:

MSBUILD : error MSB1008: Only one project can be specified. Switch: 1.0

For switch syntax, type "MSBuild /help"

When I look at the ccnet.log file I find this:

Starting process [C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe] in working directory [c:\depot\AppBuilder\1.0] with arguments [/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=Failure;CCNetNumericLabel=3;CCNetProject=AppBuilder 1.0 (Debug);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)\Artifacts\msbuild-results.xml"]

from which I infer that msbuild was run in the correct working directory and that the command line passed to it was:

/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=Failure;CCNetNumericLabel=3;CCNetProject=AppBuilder 1.0 (Debug);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)\Artifacts\msbuild-results.xml"

If I run this manually at the command line I get a similiar error.

It appears to me that the isn't passing the correct command line to the MSBuild executable.

Can you spot my error? Or is this version of CruiseControl.NET (1.3.0.2918) broken with respect to the task?

+3  A: 

Why is your msbuild tag empty? It should be something similar to:

<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>
Otávio Décio
I stripped it down for simplicity in the question -- even when I had a tag as you illustrated I got the same error message.
Jeff Stong
A: 

Without more detail since you don't appear to be specifying a project/solution file which leaves MSBuild assuming one. If you have more than one file that MSBuild is able to use as a project file in that directory that might be causing your issue.DO you have an MSbuild .proj and a .sln file by any chance? Or two solution files?

Alex
There's only a single .sln in the directory specified by <workingDirectory>. If I open a cmd window and run MSBuild with no parameters it builds without error. Only when I add all those extra parameters that cc.net adds does it fail.
Jeff Stong
+8  A: 

I think maybe it is your space in the artifact directory path. MSBuild really does not like spaces as it considers it a break between arguments. Can you try an remove the space from that path and see what happens?

Alex
Alex, you're definitely onto something here. It seems its the last part of the parameter list ("/l: ....") that is confusing MSBuild. I've always just let cc.net choose the artifacts directory. I presume this is some configuration property?
Jeff Stong
Answering my own in-comment question here -- it appears that <artifactDirectory> in <project> can be used to control this.
Jeff Stong
Hope it works. Let me know.
Alex
The issue seemed to be not only spaces in the artifact directory path but spaces in the path to the logger. Once I eliminated those things seem to work. I'm going to up vote this answer and mark it as the accepted answer -- thanks for your help.
Jeff Stong
np, glad you got it working
Alex
MSBuild definitely doesn't like spaces at all. I encountered the same error you did when testing property overrides for certain targets in my build file. Once I eliminated spaces from the paths, everything worked.
Scott A. Lawrence