关于.net:是否有工具可以在C#应用中查找未引用的函数(无效,过时的代码)?

关于.net:是否有工具可以在C#应用中查找未引用的函数(无效,过时的代码)?

Is there a tool for finding unreferenced functions (dead, obsolete code) in a C# app?

如果没有从任何地方调用foo(),我想删除foo()。


Gendarme将检测没有上游调用者的私有方法。它可以跨平台使用,并且最新版本处理" AvoidUnknownPrivateCodeRule"。

FxCop将检测没有上游调用者的公共/受保护方法。但是,FxCop不会在没有上游调用者的情况下检测所有方法,因为这是为了检查您的代码是否属于库的一部分,因此公共成员将被排除在外。您可以使用NDepend来搜索没有上游调用者的公共成员,我将在其他StackOverflow答案中对此进行详细介绍。

(编辑:添加了有关Gendarme的信息,该信息实际上可以执行发问者的要求)


NDepend还将报告可能未使用的代码。


请记住,如果方法标记为public,则Resharper(以及可能的其他类似工具)将不会突出显示未使用的方法。静态代码分析工具无法检查解决方案之外的其他程序集是否使用了程序集的方法。因此,淘汰未使用的方法的第一步是将其可见性减小为privateinternal


NDepend工具可以帮助您在.NET代码库中查找未使用的代码。免责声明:我是该工具的开发人员之一。

NDepend建议通过LINQ查询(CQLinq)编写代码规则。提出了大约200个默认代码规则,其中3个专用于未使用/死代码检测:

  • 潜在失效的类型(因此检测未使用的类,结构,接口,委托...)
  • 可能死亡的方法
  • 潜在的死亡领域

NDepend集成在Visual Studio中,因此可以在IDE内部检查/浏览/编辑这些规则。该工具也可以集成到您的CI流程中,并且可以生成报告,以显示违反规则和罪魁祸首的代码元素。

如果单击这3个指向这些规则源代码的链接,您会发现有关类型和方法的链接有些复杂。这是因为它们不仅检测未使用的类型和方法,而且还检测仅由未使用的无效类型和方法(递归)使用的类型和方法。

这是静态分析,因此是规则名称中的潜在前缀。如果仅通过反射使用代码元素,则这些规则可能会将其视为未使用,情况并非如此。

除了使用这3条规则外,我建议您通过测试来衡量代码覆盖率,并力争全面覆盖。通常,您会看到测试无法涵盖的代码实际上是可以安全丢弃的未使用/死代码。这在尚不清楚代码分支是否可访问的复杂算法中特别有用。


是的,MZ-Tools插件具有审阅无效代码功能。


Resharper可以做到这一点,而不仅限于方法。它也可以通过使用语句,变量等来实现。


好吧,如果VS不是本机执行此操作,则一种简单的方法是右键单击该方法,然后选择"查找所有引用"。如果只有1个引用(在声明该引用的位置),则很可能在其他任何地方都没有使用它。


推荐阅读

    linux命令下载工具?

    linux命令下载工具?,工具,网络,代理,代码,简介,位置,系统,第一,下载工具,文

    linux命令和库函数?

    linux命令和库函数?,系统,标准,管理,地址,服务,库函数,环境,平台,第一,状态,1

    linux好用的命令工具?

    linux好用的命令工具?,系统,管理,工具,基础,服务,信息,工作,发行,公司,代码,L

    字符串查找命令linux?

    字符串查找命令linux?,系统,字符串,工具,信息,文件,命令,字符,选项,文本,范

    linux常用命令行工具?

    linux常用命令行工具?,系统,工作,工具,地址,管理,信息,命令,软件,目录,基础,l

    linux命令行专业工具?

    linux命令行专业工具?,工具,系统,工作,信息,服务,环境,基础,命令,管理,发行,l

    linux查找帮助的命令?

    linux查找帮助的命令?,系统,命令,信息,软件,名称,文件,指令,进程,表示,参数,l

    linux查找帮助的命令?

    linux查找帮助的命令?,系统,命令,信息,软件,名称,文件,指令,进程,表示,参数,l

    linux命令行执行工具?

    linux命令行执行工具?,工具,系统,网络,分析,工作,服务,状态,信息,电脑,发行,s

    linux查找重复项命令?

    linux查找重复项命令?,工具,系统,电脑,百度,文件,命令,情况,名字,标准,通用,l

    linux命令查找进程?

    linux命令查找进程?,系统,名称,软件,状态,进程,电脑,信息,命令,材料,数据,怎

    linux查看函数命令?

    linux查看函数命令?,系统,信息,名称,命令,位置,情况,公用,名字,标准,资料,lin

    linux命令查找日志?

    linux命令查找日志?,地址,信息,系统,名称,对比,状态,实时,命令,日志,等级,lin

    linux查找php命令?

    linux查找php命令?,服务,信息,系统,名称,工具,软件,网络,代码,工作,网站,Linu

    linux命令查找内容?

    linux命令查找内容?,命令,文件,网络,名称,信息,工作,标准,系统,管理,位置,lin

    开发linux命令工具?

    开发linux命令工具?,系统,工具,环境,状态,平台,设计,数据,电脑,中小企业,标

    linux无效对象的命令?

    linux无效对象的命令?,软件,系统,单位,网络,管理,术语,检测,电脑,环境,风险,l

    linux命令行工具大全?

    linux命令行工具大全?,工作,系统,工具,地址,信息,命令,目录,基础,管理,文件,l

    linux数据库查找命令?

    linux数据库查找命令?,位置,名称,状态,服务,软件,信息,系统,命令,名字,密码,

    linuxip命令无效?

    linuxip命令无效?,地址,信息,网络,系统,电脑,传播,状态,软件,不了,命令,linux