我有一個編譯程序集。我想以編程方式比較該程序集中某個方法的實現方法與我期望的方法。以編程方式比較兩種方法的IL
有沒有一種方法可以比較他們的ILs?即使我可以獲得任何指令集的字節數組表示形式,我也會處於一個不錯的位置。
幫助讚賞。
我有一個編譯程序集。我想以編程方式比較該程序集中某個方法的實現方法與我期望的方法。以編程方式比較兩種方法的IL
有沒有一種方法可以比較他們的ILs?即使我可以獲得任何指令集的字節數組表示形式,我也會處於一個不錯的位置。
幫助讚賞。
你可以嘗試使用反射,並使用字節數組比較IL。
看看這個方法:http://msdn.microsoft.com/en-us/library/system.reflection.methodbody.getilasbytearray.aspx
可以使用程序Ildasm.exe從一個Visual Studio命令提示符,然後像做程序Ildasm.exe DLL名稱
我的意思是,我需要以編程方式做到這一點。 – 2010-09-14 21:43:44
這篇文章可能會幫助 - 然後 - http://support.microsoft.com/kb/304655 – stack72 2010-09-14 21:47:02
可以使用轉儲組件ILDASM和diff的兩個版本是這樣的:
ildasm /ALL /TEXT assembly1.dll > dump1.txt
ildasm /ALL /TEXT assembly2.dll > dump2.txt
fc dump1.txt dump2.txt
這很好。但是,我只需要比較兩個程序集中單個方法的實現。這兩個程序集可能有很多不同之處。 – 2010-09-14 21:57:39
使用Mono.Cecil可能是一個良好的開端。 Cecil是一個庫,用於讀取和修改CLR程序集,並且會爲您抓取CIL字節碼,爲您進行所有文件解析。
您可能能夠使用另一個潛在庫Boogie
爲塞西爾+1。這個庫很棒。 – Bobby 2010-09-14 21:57:17
你是男人!這正是我所期待的。大約一個小時前我一直在研究這種方法,並且早些時候使用過它。當我需要它時從未想過它。再次感謝。 – 2010-09-14 22:06:41