51

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

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

我知道我可以使用 .NET Reflector 并使用 Assembly Diff 插件。有没有其他好的工具可以做到这一点?

4

6 回答 6

49

比较 .NET 程序集的方法建议

商业的:

自由:


Beyond Compare(商业)等现有的比较工具可以通过特殊配置来做到这一点。以下是如何为 Beyond Compare 执行此操作:

  • 前往ToolsOptions
  • 点击New..,选择“文本格式”,点击OK
  • 给它一个名字(比如,EXE 或 DLL),并将掩码指定为*.exe*.dll
  • 单击选项卡Conversion并选择“外部程序(Unicode 文件名)”
  • 在“加载”下,指定路径ildasm并添加 %s /OUT:%t /NOBAR(即C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\ildasm.exe %s /OUT:%t /NOBAR:)
  • 请务必检查disable editing
  • 点击Save,然后Close
  • 重启BC,打开两个exe文件进行比较,现在应该会ilasm自动反编译成。

您还可以为这种新格式添加语法突出显示。我计划将语法文件发送给他们,以便共享

于 2009-03-16T23:00:53.873 回答
25

两种方式。

您可以使用经典工具进行 ILDASM 和 diff。

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

[片断 C# 臃肿..]

于 2009-03-16T22:59:32.283 回答
11

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

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

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

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

于 2009-07-20T22:09:11.327 回答
7

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

Search by Change面板专门用于浏览程序集代码差异。请注意:

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

NDepend 按差异面板搜索

另请注意,在屏幕截图中生成了一个CQLinq 代码查询来浏览差异。

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

默认情况下提出了许多其他默认差异查询和规则,这将使您能够以智能的方式浏览 .NET 代码差异。

于 2010-08-28T14:15:24.750 回答
2

另一种选择是来自 Microsoft的LibCheck 。

用于获取公共 API 差异的相当古老的控制台工具。如果不调试并重新定位到更新的 .net 版本,我就无法运行。但是,它给了我非常清晰的输出,我稍后会使用它。

这是一篇带有屏幕截图的文章。

于 2015-08-08T11:43:12.117 回答
-11

Java 有一个不错的:Semantic Diff Utilities

于 2009-03-16T23:01:14.230 回答