代码之家  ›  专栏  ›  技术社区  ›  STW

.NET程序集差异/比较工具-有哪些可用工具?[闭门]

  •  24
  • STW  · 技术社区  · 17 年前

    到目前为止,我发现的其他工具似乎仅限于API级别(名称空间、类、方法)的差异——这并不能满足我的需求。

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

    (就我个人而言,我喜欢WinMerge用于文本差异,因此具有类似接口的应用程序将非常好)

    8 回复  |  直到 17 年前
        1
  •  13
  •   Patrick from NDepend team    9 年前

    工具 NDepend

    专家组 按更改搜索 专用于浏览程序集代码差异:

    enter image description here


    提出了许多约束差异和进化的代码规则。他们可以是一个很好的开始,写你自己的或使他们适应你的需要。例如,看看规则:

    Types that used to be 100% covered but not anymore

    // <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 }
    


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

    免责声明:我为独立基金工作

        2
  •  6
  •   David Peters    13 年前

    ILSpy 可以将一个大概的文件反编译成一个整洁的目录结构。对每个程序集执行此操作,您可以使用自己选择的diff工具查看发生了哪些更改。

        3
  •  5
  •   oɔɯǝɹ    15 年前

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

        4
  •  5
  •   Community Mohan Dere    9 年前

    对我来说,这是一个重复的问题 this one .

    正如在另一篇文章中提到的,有一个免费&名为 BitDiffer . 令人惊讶的是,它可以比较整个构建或单个DLL,并显示名称空间层次结构,以便轻松找到更改的内容。

        5
  •  4
  •   Smi    14 年前
        6
  •  1
  •   Chris Brandsma    17 年前

    我相信有一个反射器插件在那里 http://www.codeplex.com/reflectoraddins 叫diff,你可以试试。

        7
  •  0
  •   Kevin Castle    16 年前

    反射镜的diff addin非常棒! 我已经用了好几年了。

        8
  •  0
  •   Earlz    14 年前

    我制作了一个小工具,专门用于以某种方式比较程序集。我有两个基本相同的组件,除了方法中的IL稍有不同,还有一个有一些NOPs散布在各处。他们的C#代码几乎相同,但IL显然完全不同。我尝试使用ILDasm并将生成的输出与OrtooisEmerge/WinDiff进行比较,但是它有太多错误的差异,所以没有用。NOP真的弄乱了输出,因为它改变了分支地址等等,并且基本上在每个方法的每一行上都产生了差异。

    所以,我建立了一个叫做 ILDump . 它是BSD授权的。它能够使用“智能”标签重命名来修剪NOP,以便相同但被NOP移位的代码不会被Diff程序检测为差异,并且它也只打印出重要的标签(即分支/切换到的标签)。它还可以对方法进行排序,这样以不同方式“创建”的两个程序集就不会被认为是不同的。

    推荐文章