比较编译的.NET程序集?

时间:2009-03-16 22:46:14

标签: c# .net vb.net debugging reverse-engineering

有没有好的程序可以比较编译.NET程序集?

例如我有HelloWorld.dll(1.0.0.0)和HelloWorld.dll(2.0.0.0),我想比较差异我该怎么做?

我知道我可以使用.NET Reflector并使用Assembly Diff插件。还有其他好的工具吗?

6 个答案:

答案 0 :(得分:43)

答案 1 :(得分:24)

两种方式。

您可以使用经典工具进行ILDASM和差异化。

或者您可以使用NDepends,这将花费该功能。

[片到C#bloaters ..]

答案 2 :(得分:11)

我只需要比较相同DLL的两个版本,它们具有相同的版本(我需要实现一个小的修补程序,并在生产中部署DLL,但我想确保没有其他更改泄漏到代码中) 。理想情况下,我希望Assemby Diff插件向我展示差异,但它不起作用(它认为我正在将DLL与自身进行比较)。所以这就是我所做的:

  • 创建了两个文件夹来保存反汇编的源文件。
  • 使用 Reflector 导出选项(从上下文菜单中)从上一步创建的文件夹中的每个DLL生成源文件。
  • 使用免费DiffMerge工具比较两个目录;这些工具向我展示了修改过的文件和差异。

这有点笨拙,但似乎有效。我希望Assembly Diff插件工作正常。

更新:最新版本的Assembly Diff插件应该可以解决比较同一个程序集的两个版本的问题。试一试。

答案 3 :(得分:7)

工具NDepend提供了许多处理.NET代码差异的功能。 免责声明:我是该工具的开发人员之一

面板按更改搜索专用于浏览程序集代码差异。请注意:

  • 您可以插入NDepend菜单使用的任何代码差异工具比较较新版本的源文件
  • 如果您没有源代码,只有原始程序集,则有选项使用Reflector
  • 比较旧版本和较新版本

NDepend Search by Diff Panel

另请注意,屏幕截图中会生成CQLinq code query来浏览差异。

from m in Application.Methods 
where m.CodeWasChanged() 
select new { m, m.NbLinesOfCode }

默认情况下会提出许多其他默认的diff查询和规则,这样可以让您以智能方式浏览.NET代码差异。

答案 4 :(得分:1)

另一个选项是来自Microsoft的LibCheck

非常老的控制台工具,用于获取公共API差异。如果没有调试并重新定位到更新的.net版本,我就无法运行。但是,它给了我非常明确的输出,我将在以后使用它。

这是一张带有屏幕截图的article

答案 5 :(得分:-7)

Java有一个很好的:Semantic Diff Utilities