在我看来,更好的解决方案是使用一些构建脚本,例如 NAnt 或 MSBuild。然后你的 CruiseControl .NET 只执行构建脚本的一部分。 通常构建脚本比 ccnet.config 更容易维护。
此外,调试更容易,因为您可以手动运行构建脚本的任何部分。
MsBuild 中的示例:您可以先制作一个 xml 文件(我们称之为 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>
如果您想从命令行使用它,只需键入“msbuild MyTasks.msbuild”
然后在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>
唯一不好的是,如果您的构建需要大约 20 分钟,您不知道 cc 中的状态。但这可以解决,因为您的项目 name="All" 可能有许多 msbuild 任务:
<project name="All" >
<!-- ... -->
<tasks>
<msbuild>
<!-- ... -->
<targets>ProjectA</targets>
</msbuild>
<msbuild>
<!-- ... -->
<targets>ProjectB</targets>
</msbuild>
</tasks>
<!-- ... -->
</project>
希望这会有所帮助...