2016-02-20 124 views
0

假設我有2倍的DLL由兩個不同的團隊來維護:檢測缺少方法

Team1.dll(V1.0)

public class Foo 
{ 
    int GetValue() { return 3; } 
} 

Team2.dll(V1.0)

public class Bar 
{ 
    public int IncFooValue(Foo foo) { return foo.GetValue() + 1; } 
} 

執行Team1.dll(v1.0)和Team2.dll(v1.0)時,一切正常。但是,假定Team1.dll已更改&方法Foo.GetValue()已被刪除(v1.1),並在Team2.dll旁邊放置(全部不重建Team2.dll)。如果執行,那麼你會得到一個MissingMethodException。

問:我怎麼能檢測是否Team1.dll不再兼容Team2.dll不執行呢?

例如,像:

Foreach Class in Team2.dll 
    Foreach Method in Class 
     Foreach Instruction in Method 
      If Instruction not exists in Team1.dll 
       Throw "Does not exist" 
+3

你應該使用語義版本。去除的方法是斷 –

+1

當他們不兼容,出現錯誤或策略發生變化(回退)時,您會發生什麼? – alexm

+0

@ DanielA.White:我同意,但這不是版本編號。只是試圖檢測是否在沒有重建的情況下發生了重大更改 – jt000

回答

0

檢查的類型包含方法的定義。

 if (foo.GetType().GetMethod("GetValue") != null) 
     { 
     return foo.GetValue() + 1; 
     } 

如其他人所說,你可能會更好追求另一種策略(更好的版本/向後兼容或處理的主叫端例外。

+0

謝謝。實際上,我正在尋找更通用的方法來檢測Test1.dll是否與Test2.dll兼容。例如,我可以將代碼放入工具中運行Test2.dll,以檢測是否存在Test1.dll中的所有方法... – jt000

+0

閱讀http://semver.org/請閱讀以下這只是讓你的代碼來檢查應用程序啓動時其他DLL的版本 –

+0

我實際上是在尋找一種技術解決方案,而不是依靠約定。在依賴semver方面存在一些問題:1)人們犯錯,2)大公司版本號有時由官僚決定。 – jt000