我目前正在尝试设置CruiseControl.net,所以我想知道如何拆分我的任务.
通常,我想运行单元测试(xUnit.net),帮助文件生成(Sandcastle)和FxCop.
现在我只是想知道我是否应该在msbuild配置("文档")中指定一个新目标并使用它来运行SandCastle,或者如果它属于一个单独的脚本?此外,msbuild用于构建某些东西,所以我猜ncover,xunit和FxCop不应该是它的一部分,或者它们应该是什么?
msbuild的预期范围是什么?
将几乎所有内容都放入MSBuild脚本中,以便您和其他开发人员可以通过命令行在本地运行相同的步骤.否则,当构建出现问题时,您必须在CC服务器上进行调试.不是一个很好的调试经验.此外,您希望在提交之前在本地运行构建以确保它正常工作.
我不会在MSBuild脚本中添加的一些内容是:
SVN更新,因为CC无论如何都必须执行此操作,并且您通常不希望在执行本地构建时更新.(好吧,我做型svn up && msbuild
相当频繁,但这是如此短暂,我并不需要把它变成脚本.)
创建和发布构建报告; 再次这是CC的域名,在本地没用
至于构建MSBuild文件,您将需要一个"主"构建脚本,您可以使用它来构建所有内容或仅构建一些目标,例如
MSBuild /t:Build
只是逐步构建代码
MSBuild /t:Rebuild
进行干净的重建
MSBuild /t:UnitTest
只运行单元测试
MSBuild
最常见的选择,比方说,相当于 t:Build;UnitTest
MSBuild /t:All
干净地构建代码,文档和设置,运行所有测试,并打包结果
您还可以为常用变体添加"快捷方式"目标.
拥有一个主构建文件并不意味着在这个单个文件中定义了所有内容; 您可以包含其他msbuild文件,和/或递归调用msbuild来组织您的构建.例如:
master .proj文件应该相对简单; 主要是,它应该定义项目特定的东西,如构建解决方案列表和项目特定的覆盖
让主文件包含一个包含目标和默认属性的.targets文件; 努力保持这个项目中立和可重复使用.
如果.targets文件变得太大,请将其拆分为单独的文件,例如一个用于代码,一个用于帮助和文档,一个用于设置和打包.让你的主.targets文件包含那些子文件,这样你的.proj文件仍然只需要包含一个文件
同样,如果需要,您可以拆分主.proj文件,例如通过子系统.