2011-09-20 48 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中通過名稱綁定參數),可見性和屬性(在程序集,類,方法和參數級別上)。