2011-09-20 85 views
3

有人知道验证当前代码库不会更改现有公共API的好方法吗?我想将其作为持续集成过程的一部分来运行。验证我没有破坏公共类API

有点像集:

与(以前的所有公共方法签名和公共类型名称)

  • 应该等于路口(目前所有的公共方法签名和公共类型名称的工会)(深比较)所有以前的公共方法签名和公共类型名称

也许某些项目使用了Mono.Cecil或NDepend,并且能够从命令行分析此问题?

+2

综合单元测试。 –

+1

......当你拥有的只是一把锤子。 – Henrik

回答

3

我前段时间写了一篇关于how to avoid API breaking change的博客文章,介绍了NDepend及其代码查询和规则功能。 免责声明:我是该工具的开发人员之一

从那时起,NDepend已经发展了,它的查询语言也是如此。如果您下载NDepend试用版并分析您想要搜索API重大更改的代码库的两个版本,请查看默认代码规则组针对以下CQLinq rules的API重大更改

执行该规则看起来像例如(NUnit的v2.5.8和v2.5.3之间差异):

API breaking changes

你还可以找到这些默认的编码规则和查询相关:

+0

确实不错。要检查博客文章。 – Henrik

1

有corcompare,一个工具,单声道的用途内部将compare their API转换为Microsoft .Net实现。如果你想生成一个像Mono一样的HTML报告,corcompare is available on github(可以用Visual Studio构建)。还有一个叫做gui-compare的GUI前端,使用相同的Cecil后端(UI需要安装gtk-sharp)。我以前使用它,它非常舒服 - 只需将它指向两个不同的dll,并弹出一个不错的比较窗口。另一方面,Corcompare会生成XML API描述符,如果您想自动执行此检查。这些工具验证方法描述符(包括参数名称,因为您可以在C#4中通过名称绑定参数),可见性和属性(在程序集,类,方法和参数级别上)。