比较编译的.NET程序集?

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

例如我有HelloWorld.dll(1.0.0.0)和HelloWorld.dll(2.0.0.0),我想比较差异,我怎么能做到这一点?

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

如何比较.NET Assembliesbuild议

商业:

  • NDepend的

自由:

  • JustAssembly
  • BitDiffer
  • Reflector Diff加载项 (您已经发现)

两种方式。

你可以用ILDASM和经典工具进行比较。

或者你可以使用NDepends,这将花费这个function。

[Piece to C#bloaters ..]

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

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

这有点笨拙,但似乎工作。 不过,我希望Assembly Diff插件可以工作。

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

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

通过更改的面板search专用于浏览程序集代码差异。 请注意:

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

NDepend按差异面板搜索

还要注意在屏幕截图中,生成一个CQLinq代码查询来浏览diff。

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

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

  • 曾经是100%覆盖,但不再是
  • API中断更改:方法
  • 避免使复杂的方法变得更加复杂
  • 避免通过typestesting来减less代码覆盖率
  • 从现在开始,所有添加或重构的types都应该尊重基本的质量原则
  • 避免将不可变types转换为可变types
  • 启发式查找types从一个名称空间或程序集移动到另一个

还有一个select是来自Microsoft的LibCheck 。

漂亮的旧控制台工具只是获取公共API差异。 我不能运行没有debugging和redirect到一个更新的.NET版本。 不过,它给了我很清楚的输出,我将在以后使用它。

这里是一个截图的文章 。

Java有一个很好的: Semantic Diff Utilities