In my opinion the better solution is to use some build script like NAnt or MSBuild. Then your CruiseControl .NET just executes a part of build-script. Usually build-scripts are easier to maintain than a ccnet.config.
Also the debugging is easier as you can run any part of the build-script manually.
Example in MsBuild: You can first make a xml-file (let's call it MyTasks.msbuild):
<Project DefaultTargets="All" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="ProjectA">
<!-- Your project build-scripting...-->
<Exec Command="echo Hello A"/>
</Target>
<Target Name="ProjectB">
<!-- Your project build-scripting...-->
<Exec Command="echo Hello B"/>
</Target>
<Target Name="All">
<CallTarget Targets="ProjectA" />
<CallTarget Targets="ProjectB" />
</Target>
</Project>
If you like to use it from command-line, just type "msbuild MyTasks.msbuild"
Then in ccnet.config:
<project name="ProjectA" >
<!-- ... -->
<tasks>
<msbuild>
<executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.21006\MSBuild.exe</executable>
<timeout>3600</timeout>
<logger>C:\Program Files\CruiseControl\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
<workingDirectory>C:\Temp\CI\</workingDirectory>
<projectFile>C:\MyTasks.msbuild</projectFile>
<buildArgs>/toolsversion:4.0 /p:Configuration=Debug;</buildArgs>
<targets>ProjectA</targets>
<description>Building Project A</description>
</msbuild>
</tasks>
<!-- ... -->
</project>
<project name="All" >
<!-- ... -->
<tasks>
<msbuild>
<executable>C:\WINDOWS\Microsoft.NET\Framework\v4.0.21006\MSBuild.exe</executable>
<timeout>3600</timeout>
<logger>C:\Program Files\CruiseControl\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>
<workingDirectory>C:\Temp\CI\</workingDirectory>
<projectFile>C:\MyTasks.msbuild</projectFile>
<buildArgs>/toolsversion:4.0 /p:Configuration=Debug;</buildArgs>
<targets>All</targets>
<description>Building Project A and B</description>
</msbuild>
</tasks>
<!-- ... -->
</project>
The only bad thing is that if your build would take like 20min, you don't know the status in cc. But that can be fixed as your project name="All" could have many msbuild tasks:
<project name="All" >
<!-- ... -->
<tasks>
<msbuild>
<!-- ... -->
<targets>ProjectA</targets>
</msbuild>
<msbuild>
<!-- ... -->
<targets>ProjectB</targets>
</msbuild>
</tasks>
<!-- ... -->
</project>
Hope this helps...