用于查找无法访问/未使用的c#代码的开源工具

是否有任何开源静态代码分析工具,可以帮助在C#程序中找到无法访问/未使用的代码?

FxCop内置于Visual Studio的更高版本中,将警告未使用的私有或内部成员。 右键单击您的项目,然后选择“运行代码分析”。 与其他人已经注意到的编译器识别的“无法访问的代码段”一起,这应该捕获剩余的未使用的代码。

(注意FxCop 不会警告未使用的公共成员或受保护成员,因为这些成员可能是外部调用者使用的API的一部分。此外,FxCop并非在所有版本的Visual Studio中都可用,但旧版本可供下载。)

我可以建议的最好的是在主可执行文件上使用的代码覆盖工具而不是测试程序集,然后通过它的步骤放置应用程序…在一些更深奥的情况下,NP代码的静态分析很难做到。

虽然不是开源工具,但您可以使用R# (Resharper)。 它是一个可视化工作室加载项,可以显示无法访问的代码,并可以自动删除它(使用系统清理)。

您可以使用Visual Studio 2005/2008 Team Suite中提供的代码覆盖率工具。

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

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

  • 可能死的类型 (因此检测未使用的类,结构,接口,委托…)
  • 可能死的方法 (因此检测未使用的方法,ctor,属性getter / setter ……)
  • 可能死的菲尔兹

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

如果单击上面这三条链接指向这些规则的源代码,您将看到有关类型和方法的链接有点复杂。 这是因为它们不仅检测未使用的类型和方法,还检测由未使用的死类型和方法(递归)使用的类型和方法。

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

除了使用这3条规则外,我还建议通过测试来测量代码覆盖率并努力实现全面覆盖。 通常,您会看到测试无法覆盖的代码实际上是未使用/死代码,可以安全地丢弃。 这在复杂算法中尤其有用,因为不清楚代码分支是否可达。