除了编译之外,MSBuild脚本应该包含哪些内容?

时间:2009-03-04 15:44:27

标签: .net msbuild cruisecontrol.net

我目前正在尝试设置CruiseControl.net,所以我想知道如何拆分我的任务。

一般来说,我想运行单元测试(xUnit.net),帮助文件生成(Sandcastle)和FxCop。

现在我只是想知道是否应该在msbuild配置(“文档”)中指定一个新目标并使用它来运行SandCastle,或者如果它属于一个单独的脚本?另外,msbuild用于构建某些东西,所以我猜ncover,xunit和FxCop不应该是它的一部分,或者它们应该是什么?

msbuild的预期范围是什么?

2 个答案:

答案 0 :(得分:6)

将几乎所有内容都放入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来组织您的构建。例如:

  • 主.proj文件应该相对简单;主要是,它应该定义项目特定的东西,如构建解决方案列表和项目特定的覆盖
  • 让主文件包含一个包含目标和默认属性的.targets文件;努力保持这个项目中立和可重复使用。
  • 如果.targets文件变得太大,请将其拆分为单独的文件,例如一个用于代码,一个用于帮助和文档,一个用于设置和打包。让你的主.targets文件包含那些子文件,这样你的.proj文件仍然只需要包含一个文件
  • 同样,如果需要,您可以拆分主.proj文件,例如由子系统。

答案 1 :(得分:2)

我有一个单独项目的构建脚本,我只是在构建套件时从第二个构建文件中链接它们...例如,我的protobuf-net构建文件处理版本控制(SVN) ,汇编(MSBuild + NAnt for mono),测试(NUnit),打包(zip)等。这是你的构建过程;做你需要的事情;-p例如,如果我愿意,还可以进行部署和文档编制。

这还取决于你的工作方式;如果您使用的是CruiseControl,它可能会为您处理大部分内容。对我自己来说,我喜欢命令行“构建”步骤。