2014-11-21 251 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