我最近继承C#控制台应用程序,是在一些需要修剪和清理。长话短说,该程序由一个单一类含有超过110,000行代码。是啊,超过110,000线在一个单一的类。当然,该应用程序的核心业务运行的全天候更新数据使用一个动态网站。虽然我说过我的前身是"一个很好的程序",它显然他是不是在所有入面向对象(或版本控制)。

无论如何...同时熟悉自己的代码,我已经找到充足的方法,宣布,但从来没有被引用。看来,如果复制、粘贴是用来版本的代码,例如说我有一个方法被称为getSomethingImportant(),机会是存在的另一种方法称为getSomethingImortant_July2007()(该模式是functionName_[日期戳]在大多数情况下)。它看起来像当程序员被要求做出改变getSomethingImportant()他将复制、粘贴然后重新命名为getSomethingImortant_Date,更改getSomethingImortant_Date,然后改变任何方法调在代码中的新方法的名称,而旧的方法在代码,但从来没有被引用。

我想写一个简单的控制台应用程序,爬行穿过一个大类和返回的一个列表中的所有方法的次数的每一种方法是引用。我估计有超过1000方法,所以这样做一方面将需要一段时间。

是否有类别之内。净框架,我可以用来研究这个代码?或任何其他有用的工具,可以帮助识别方法宣告,但从来没有被引用的?

(侧的问题:有任何人曾经见过一个C#这样的应用程序,一个reeeealy大类?这或多或少是一个巨大的程序过程中,我知道这是我第一次看到,至少这个大小。)

有帮助吗?

解决方案

你可以尝试使用 NDepend 如果你只需要提取一些统计数据。注意,这个工具依赖于单。塞西尔的内部检查组件。

其他提示

下载的 免费的审判 的Resharper.使用Resharper->检索->查找用法文件(Ctrl-Shift-F7)有所有使用实例突出显示。此外,数将出现在状态吧。如果你想搜索多个文件,你也可以这样做使用Ctrl-Alt-F7。

如果你不喜欢这样做的案文搜索功能,名称在Visual Studio(Ctrl-Shift-F),这应该告诉你多少次被发现在解决方案,并且他们在哪里。

来完成 罗曼Verdier 回答,让我挖一位成什么NDepend可以给你带来这里。(免责声明:我是一个开发商的NDepend队)

NDepend允许查询。净码与一些皇宫的查询。知道这方法的呼吁以及被称为其他人,是很简单,作为编写以下的皇宫查询:

from m in Application.Methods
select new { m, m.MethodsCalled, m.MethodsCallingMe }

此查询的结果是提出一种方式,使得易于浏览的呼叫者和被呼叫者(及其100%纳入Visual Studio)。

NDepend methods callers and callees


还有许多其他NDepend能力,可以帮助你。例如你可以 右击方法,在Visual Studio>NDepend>选择的方法...>是使用我的(直接或间接地) ...

NDepend Visual Studio method right click

以下代码查询所产生的...

from m in Methods 
let depth0 = m.DepthOfIsUsing("NUnit.Framework.Constraints.ConstraintExpression.Property(String)")
where depth0  >= 0 orderby depth0
select new { m, depth0 }

...这符合直接和间接的呼叫者,深呼吁(1装置直接来电、2个装置叫直的呼叫者等等)。

NDepend indirect method callers

然后按一下按钮 出口到图, 你接到一个电话线图的枢轴法(当然这可能是周围的其他方法,i。电子商务的方法直接或间接地通过特别是枢轴法)。

NDepend call graph

我不认为你想要写这个你自己-就买 NDepend 并使用它 代码查询语言

FXCop有一项规则,将确定未使用私人的方法。所以你可以标记的所有方法私人和有生成列表。

FXCop还有一种语言如果你想得到的票友 http://www.binarycoder.net/fxcop/

如果你不要掏出NDepend,因为它听起来像是只有一个单一的类在一个单一的组装出评论的方法和编译。如果它汇编,删除它们-你不会有任何遗产继承问题,以虚拟方式或类似的东西。我知道这听起来原始的,但有时候,重构仅仅是繁重的工作这样的。这是一种假设你有单元的测试运行之后,每一个建立,直到你已经得到了代码清理(红绿化/重构).

该分析在窗口 反射器 可以告诉你其中一种方法被称为(使用).
听起来像这将需要很长的时间,获得信息方式,虽然。
你看起来可能会在API反射器,提供用于编写加入和参如果你可以得到的繁重工作的分析方式。我希望的源代码 代码的指标添加-在 可以告诉你一些关于如何获得的信息有关的方法从反射器。

编辑:还的 代码模型的观众 加反射器,可能的帮助。这是一个很好的方式来探索的反射镜。

我不知道什么这是建来处理这个具体情况,但是你可以使用单。塞西尔反映大会和最后引用的IL。不应该太难。

没有简单的工具来这样做。净框架本身。但是我不认为你真的需要一个列表中未使用的方法。因为我看到它,你会,只是通过代码和各种方法,你会检查,如果它未使用,然后将其删除,如果这样。我会用Visual Studio"查找参考"的命令这样做。或者您可以使用Resharper与其"分析"窗口。或者你可以使用的视觉工作室的代码分析工具来查找所有未使用私人的方法。

尝试有的编译器发的汇编文件,作为在x86说明,没有。净组件。

为什么?因为它很容易分析汇编码于它是C#代码。净组件。

例如,一个多功能的方法宣言》看起来是这样的:

    .string "w+"
    .text
    .type   create_secure_tmpfile, @function
create_secure_tmpfile:
    pushl   %ebp
    movl    %esp, %ebp
    subl    $24, %esp
    movl    $-1, -8(%ebp)
    subl    $4, %esp

和功能/方法参考文献将是这样:

    subl    $12, %esp
    pushl   24(%ebp)
    call    create_secure_tmpfile
    addl    $16, %esp
    movl    20(%ebp), %edx
    movl    %eax, (%edx)

当你看到"create_secure_tmpfile:"你知道你有一个多功能的方法宣言》,当你看到"叫create_secure_tmpfile"你知道你有一个功能/方法参考。这可不够好您的目的,但如果不是它只是几步之前,你可以产生一个非常可爱叫树为整个应用程序。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top