我参与维护相当大的.NET应用程序组合。该产品组合中还包括基于其他平台(本机C ++,ECLIPS Forms等)构建的旧应用程序。
我现在在NAnt上有一个复杂的构建框架,该框架管理所有这些应用程序的构建。构建框架使用NAnt做许多不同的事情:
- 从Subversion中提取代码,并在Subversion中创建标签
- 使用MSBuild for .NET或其他平台的编译器生成代码
- 窥探AssemblyInfo文件以增加版本号
- 删除某些不应包含在构建/发行版中的文件
- 将代码发布到部署文件夹
- 压缩代码以进行备份
- 部署Windows服务;启动和停止它们
- 等等。
其中大多数事情都可以单独使用NAnt来完成,但是我们确实为NAnt构建了一些扩展任务,以完成某些特定于我们环境的事情。同样,上述大多数过程在我们许多不同的应用程序构建脚本中都得到了通用和重用,因此我们不再重复逻辑。因此,它不是简单的NAnt代码,也不是简单的构建脚本。有数十个NAnt文件一起执行构建。
最近,由于以下几个原因,我对NAnt感到不满意:(1)它的语法太糟糕了-XML之上的编程语言真的很难维护;(2)该项目似乎已经死了;最近没有大量更新,似乎没有人真正掌舵。由于缺乏活动,尝试使其与.NET 4配合使用已引起一些痛苦。
因此,在没有所有这些背景的情况下,这是我的问题。鉴于我希望根据上面的列表完成一些工作,并且鉴于我主要是在.NET商店中,但我还需要构建非.NET项目,是否有我应该考虑的NAnt替代品切换到?
我所关注的东西包括Powershell(带有或不带有psake),MSBuild本身以及rake。这些都有优点和缺点。例如,MSBuild是否足够强大?我记得几年前使用过它,它似乎没有NAnt那样强大。我是否真的想让我的团队学习Ruby,以便使用rake进行构建?psake是否真的足够成熟,可以将我的投资组合固定在项目上?Powershell是否“太接近金属了”,而我最终不得不编写自己的类似于sake的构建库才能单独使用它?
还有其他我应该考虑的工具吗?如果您参与维护非常复杂的.NET产品组合,那么您将要使用哪种构建工具?您的团队目前使用什么?