CodeGo.net>比较编译的。NET程序集?

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

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

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

Danny G asked 2020-02-23T01:58:07Z
6个解决方案
43 votes

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

商业:

  • 依赖

自由:

  • 正义大会
  • 位差
  • Reflector Diff加载项(您已经发现)
Daniel LeCheminant answered 2020-02-23T01:58:47Z
24 votes

两种方式。

您可以使用经典工具来实现ILDASM和diff。

或者,您可以使用NDepends,该功能需要花费。

[用于C#膨胀器的零件..]

rama-jka toti answered 2020-02-23T01:59:19Z
11 votes

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

  • 创建了两个文件夹来存放反汇编的源文件。
  • 使用Reflector的Export选项(从上下文菜单中)来从上一步中创建的文件夹中的每个DLL生成源文件。
  • 使用免费的DiffMerge工具比较两个目录; 这些工具向我展示了修改后的文件及其区别。

这有点麻烦,但似乎可行。 不过,我希望Assembly Diff加载项能够正常工作。

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

Alek Davis answered 2020-02-23T02:00:03Z
7 votes

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

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

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

NDepend Search by Diff Panel

在屏幕截图中还请注意,生成了CQLinq代码查询以浏览差异。

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

默认情况下,建议使用许多其他默认差异查询和规则,这些查询和规则将使您以一种智能的方式浏览.NET代码差异。

  • 以前被100%覆盖但不再存在的类型
  • API重大更改:方法
  • 避免使复杂的方法变得更加复杂
  • 避免通过类型测试来减少代码覆盖率
  • 从现在开始,所有添加或重构的类型都应遵守基本质量原则
  • 避免将不可变类型转换为可变类型
  • 启发式查找从一个名称空间或程序集移动到另一名称空间或程序集的类型
Patrick from NDepend team answered 2020-02-23T02:01:17Z
1 votes

另一种选择是Microsoft的LibCheck。

相当老的控制台工具,仅用于获取公共API差异。 如果没有调试,然后重新定位到最新的.net版本,我将无法运行。 但是,它给了我非常清晰的输出,以后我将使用它。

这是带有截图的文章。

Eugene answered 2020-02-23T02:01:46Z
-7 votes

Java有一个不错的选择:语义差异实用程序

Jonathan Parker answered 2020-02-23T02:02:06Z
translate from https://stackoverflow.com:/questions/652432/compare-compiled-net-assemblies