要确认的D​​LL比较如果使用相同的源代码

时间:2013-11-25 12:13:28

标签: c# .net dll asp.net-3.5

我正在比较以确保从同一来源生成2个dll。由于我无法使用外部工具进行比较,我只是使用IL反汇编程序创建了IL文件并手动比较。

  • 对于.IL文件中的以下字段,计数相同 比较

     //   CLR method headers : 
     //   Num.of method bodies  - 
     //   Num.of fat headers    - 
     //   Num.of tiny headers   - 
    
     // Managed code : 
     //   Ave method size - 
    
  • 当计数和名称相同时,类名的顺序不相同。

在上述情况下假设两个DLL来自相同的源代码是否安全?

3 个答案:

答案 0 :(得分:9)

您可以使用ILSpy来反编译这两个DLL。对两个库使用保存代码... 选项,以便将其保存为完整的Visual Studio项目(csproj)。然后在两个目录上使用简单的WinMerge(带递归)将显示源代码中的所有差异。

我最近成功地使用这种方法来确保在生产机器上使用了什么版本的DLL。

答案 1 :(得分:3)

没有办法说出来。

由于the MVID and other properties that differ each time you compile,不仅没有两个编译的DLL相同:两个包含相同数量方法的程序集也没有说明任何内容:

  • 方法的实现可能有所不同(例如v1的Foo()方法包含return true,而v2的Foo()包含return false
  • 不同的源代码可以产生相同的IL

您似乎想要解决一个完全不同的问题,例如教育您的团队并使用持续集成来共享在构建服务器上编译的程序集。如果你能解释为什么你想确保从同一个源编译两个DLL,也许可以给出一些更好的答案。

答案 2 :(得分:1)

我认为您可以尝试以下方法 -

  1. 尝试ILSpy获取开源汇编浏览器和反编译器并比较生成的c#代码。
  2. 针对程序集中的类运行测试用例,并验证结果是否相同。