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.