.NET程序集差异/比较工具 - 有什么可用的?

STW*_*STW 25 .net diff assemblies

我希望能够在两个程序集之间进行代码级差异; Reflector的Diff插件是迄今为止我发现的最接近的东西,但要比较整个程序集是一个手动过程,需要我深入到每个命名空间/类/方法.

到目前为止,我发现的其他工具似乎仅限于API级别(命名空间,类,方法)的差异 - 这些工具不会因为我正在寻找的东西而削减它.

有谁知道这样的工具?我的要求(从最高到最低)是:

  • 能够分析/反映同一装配的两个版本的代码内容并报告差异
  • 接受一个文件夹或一组程序集作为输入; 快速比较它们(类似于WinMerge的文件夹差异)
  • 快速确定两个程序集在代码级别(而不仅仅是API)上是否等效的快速能力
  • 允许轻松向下钻取以查看差异
  • 导出有关差异的报告

(我个人喜欢WinMerge的文本差异,所以具有类似界面的应用程序会很棒)

Pat*_*eam 13

NDepend工具提供了许多处理.NET代码差异的功能.

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

在此输入图像描述


提出了许多约束diff和evolution的代码规则.它们可以是您自己编写或根据您的需求进行调整的良好开端.例如,查看规则:

曾经100%覆盖的类型但不再是

// <Name>Types that used to be 100% covered but not anymore</Name>
warnif count > 0
from t in JustMyCode.Types where 
   t.IsPresentInBothBuilds() &&
   t.OlderVersion().PercentageCoverage == 100 &&
   t.PercentageCoverage < 100
let culpritMethods = t.Methods.Where(m => m.PercentageCoverage < 100)
select new {t, t.PercentageCoverage, culpritMethods }
Run Code Online (Sandbox Code Playgroud)

或者:


要开始使用NDepend比较功能,请查看文档:

免责声明:我为NDepend工作


oɔɯ*_*ɯǝɹ 5

您可以使用ILDasm从程序集生成il源.IL源基本上是一个文本文件,因此您可以使用标准文本差异工具比较两个il文件.如果您使用报告的差异作为指示进一步查看的指示,则可能不需要解释IL源.


Dav*_*ers 5

ILSpy可以将程序集反编译为整洁的目录结构。对每个程序集执行此操作,然后可以使用自己选择的差异工具来查看已更改的内容。

  • 将这种技术与WinMerge或Araxis Merge之类的目录树差异工具一起使用已证明非常有用 (2认同)

Die*_*cic 5

对于这个问题,这是一个重复的问题。

如另一篇文章所述,有一个名为BitDiffer的免费和开源工具。令人惊讶的是,它可以比较整个内部版本或单个DLL,并且可以显示名称空间层次结构以轻松查找更改的内容。