我有一个编译程序集。我想以编程方式比较该程序集中某个方法的实现方法与我期望的方法。以编程方式比较两种方法的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