是否有工具可以在 C# 应用程序中查找未引用的函数(死的、过时的代码)?[关闭]
-
09-06-2019 - |
题
如果 foo() 没有从任何地方调用,我想删除 foo() 。
解决方案
宪兵 将检测没有上游调用者的私有方法。它是跨平台可用的,最新版本处理“避免未调用的私人代码规则".
福克斯警察 将检测没有上游调用者的公共/受保护方法。但是,FxCop 不会检测没有上游调用者的所有方法,因为它的目的是检查您的代码是否属于库的一部分,因此公共成员被排除在外。 您可以使用 NDepend 搜索没有上游调用者的公共成员,我在另一个 StackOverflow 答案中详细介绍了这一点.
(编辑:添加了有关宪兵的信息,该信息实际上按照提问者的要求进行)
其他提示
依赖型 还将报告可能未使用的代码。
请记住,如果方法被标记,Resharper(可能还有其他类似工具)将不会突出显示未使用的方法 public
. 。静态代码分析工具无法检查程序集的方法是否被解决方案之外的其他程序集使用。因此,淘汰未使用的方法的第一步是降低它们的可见性 private
或者 internal
.
是的 MZ-工具 插件具有审查死代码功能。
雷夏珀 做到这一点,而不仅仅是通过方法。它还使用 using 语句、变量等来实现这一点。
工具 依赖型 可以帮助查找 .NET 代码库中未使用的代码。 免责声明:我是这个工具的开发者之一。
NDepend 建议写 LINQ 查询的代码规则 (CQLinq). 。大约 200条默认代码规则 已提出建议,其中 3 项致力于 未使用/死代码 检测:
NDepend 集成在 Visual Studio 中,因此这些规则可以 直接在 IDE 中检查/浏览/编辑. 。该工具还可以集成到您的 CI 流程中,并且可以构建 报告 这将显示违反的规则和罪魁祸首的代码元素。
如果您单击这 3 个链接查看这些规则的源代码,您会发现涉及类型和方法的内容有点复杂。这是因为它们不仅检测未使用的类型和方法,还检测已使用的类型和方法 仅有的 通过未使用的死类型和方法(递归)。
这是 静态分析, ,因此前缀 潜在地 在规则名称中。如果使用代码元素 仅有的 通过反思,这些规则可能会认为它未使用,但事实并非如此。
除了使用这 3 条规则之外,我还建议通过测试来衡量代码覆盖率并努力实现完全覆盖。通常,您会看到测试无法覆盖的代码实际上是 未使用/死亡 可以安全丢弃的代码。这在不清楚代码分支是否可达的复杂算法中特别有用。
好吧,如果 VS 本身不这样做,一个简单的方法是右键单击该方法并选择“查找所有引用”。如果只有 1 个引用(声明它的地方),它很可能不会在其他地方使用。