Breaking Change in Cruise Control .NET 1.6

Building on my earlier post about Setting up Cruise Control .NET 1.5/1.6 on Windows 7 + IIS7, I have identified a breaking change with CruiseControl .NET 1.6.x.

For readability, I like to place each -D flag in my <buildArgs> definition on a separate line

<tasks>�
  <nant>
  <executable>$(NAntExecutablePath)</executable>
  <buildFile>D:cidefault.build.xml</buildFile>
  <buildArgs>
    -D:SolutionFile="$(Batch_WorkingFolderTrunk)MySolution.sln"
    -D:LocalDeployRoot=D:cideployMyProject </buildArgs>
  <targetList>
    <target>build</target>
  </targetList>
  </nant>
</tasks>

however in upgrading to version 1.6.x, I have come across a breaking change. Using the same script in my 1.6.x implementation, I was getting the eror message Target ‘ ‘ does not exist in this project. I confirmed that the NAnt script worked by calling it directly with the same parameters that I was defining via my CCNET project configuration.

After looking into the issue for a while (and even posting a question on StackOverflow) I found a clue when reading through the server log. I noticed that the target was being specified to nant.exe following the <buildArgs> definitions along with the white spaces and newlines. Removing the white space and newlines resolved the issues.

<buildArgs>-D:SolutionFile="$(Batch_WorkingFolderTrunk)MySolution.sln" -D:LocalDeployRoot=D:cideployMyProject</buildArgs>

I have logged a bug report with the Cruise Control .NET team regarding this issue.