2014-11-21 115 views
-2

關於改進我的構建和部署例程,我希望比較兩個不同程序集的代碼。我無法比較文件大小和創建日期,或者程序集的二進制內容,因爲即使程序集在邏輯上相同,它們也可能有所不同。從c反彙編代碼#

在以前的項目中,我已經使用了ildasm.exe併爲每個程序集生成了一個文本文件,並在稍作修改後對其進行了比較,但我寧願在不運行Process.Start()的情況下在c#代碼中執行此操作。

作爲例子,我希望做這樣的事情:

public bool AssemblyComparer(string path1, string path2) 
{ 
    var text1 = MagicLibrary.Disassemble(path1); 
    var text2 = MagicLibrary.Disassemble(path2); 
    return text1.Equals(text2); 
} 

任何建議,如何做到這一點可以理解。

+0

'組件的二進制內容,因爲即使組件在邏輯上相同,它們也可能不同。「我沒有得到這個? – 2014-11-21 08:36:45

+1

整個詞是使用版本。你爲什麼要比較內容? – Sinatr 2014-11-21 08:49:03

+0

二進制內容包含程序集編譯時的時間戳,因此即使它們在邏輯上相同,它們也不具有相同的校驗和。 – Snorre 2014-11-21 11:54:03

回答

1

我還沒有使用它,但據我所知Mono.Cecil是一個庫,可以從程序集中檢查IL代碼。見Mono.Cecil by jbevain。但我不認爲它很容易在代碼片段中使用。

+0

謝謝,我會仔細研究一下。我添加了片段來澄清我的目的。我敢肯定,我可以處理稍微複雜的代碼:) – Snorre 2014-11-21 12:01:00

+0

@Snorre不想暗示你不能:) – Uwe 2014-11-21 12:12:54