Dot-Net

使用 TFS 檢測 .NET 程式碼中的重大更改?

  • April 15, 2013

每當 TFS 建構解決方案時,我想檢測 .NET 程式碼(特別是 C#)中的重大更改。如果在簽入的程式碼和最近成功建構的版本之間存在任何重大更改(例如“ .NET 中 API 重大更改的明確指南”中所述),我想了解一下。重大更改不一定會導致建構失敗。如果沒有編寫一個使用反射來比較同一個程序集的兩個版本的應用程序,那該怎麼做呢?

是的,我會(並且確實)為此使用 NDepend。我正在開發一種為開發人員提供可擴展 API 的產品。因此,我們需要確保在發布之間,我們不會刪除那些開發人員可能依賴的功能。另一方面,我們需要靈活性來發展產品,而無需圍繞回歸進行大量限制。

有些事情你會想要考慮。

  1. 更改引用的 DLL 的版本應被視為重大更改。
  2. 刪除/更改成員會破壞向後兼容性。
  3. 添加成員會破壞前向兼容性(有些人只是認為“添加的成員”是安全的,但它確實存在相關風險)。
  4. 每次建構都更改文件版本,您有時會需要它。
  5. 考慮編寫定義您的“公共 API”的契約。這些將是您需要在組織之外支持的成員。將它們視為互操作性邊界。然後,它允許您的實現類具有公共成員,這些成員不在 API 中(因此被認為是“不受支持”),因此您可以更改它們而不必擔心破壞可擴展性 API。擴展 API 包括編寫一個新介面(介面名稱中帶有版本號),該介面不是從介面的先前版本派生的(派生會阻止您完全棄用成員,並在需要實現多個介面版本時創建地獄在一個班級。
  6. 不要忘記屬性,對它們的更改可能不會破壞靜態兼容性,但可能會影響執行時。

為了詳細說明JamesAdam的答案,我想提供有關使用 NDepend 及其程式碼查詢和規則功能*檢測重大更改的詳細資訊。*免責聲明:我是該工具的開發人員之一

NDepend 已經進化,它的查詢語言也在進化。如果您下載 NDepend 試用版並分析您想要搜尋重大更改的程式碼庫的兩個版本,請查看預設程式碼規則組API Breaking Changes以獲取以下CQLinq 規則

例如,執行這些程式碼規則之一(NUnit v2.5.8 和 v2.5.3 之間的差異):

API 重大更改

引用自:https://stackoverflow.com/questions/7249428