是否有任何开源静态代码分析工具可以帮助在C#程序中找到无法访问/未使用的代码?
答案 0 :(得分:5)
FxCop内置于Visual Studio的更高版本中,将警告未使用的私有或内部成员。右键单击您的项目,然后选择“运行代码分析”。与其他人注意到的编译器识别的“无法访问的代码段”一起,这应该捕获剩余的未使用的代码。
(注意FxCop将不警告未使用的公共成员或受保护成员,因为这些可能是外部调用者使用的API的一部分。此外,FxCop并非在所有版本的Visual Studio中都可用虽然旧版本可供下载。)
答案 1 :(得分:1)
我能建议的最好的是主要可执行文件上使用的代码覆盖工具,而不是测试程序集,然后通过它的步骤放置应用程序...在一些更深奥的案例中,NP代码的静态分析很难做到
答案 2 :(得分:1)
虽然不是开源工具,但您可以使用R#(Resharper)。它是一个可视化工作室加载项,可以显示无法访问的代码,并可以自动删除它(使用系统清理)。
答案 3 :(得分:0)
您可以使用Visual Studio 2005/2008 Team Suite中提供的代码覆盖率工具。
答案 4 :(得分:-1)
工具NDepend可以帮助在.NET代码库中查找未使用的代码。但是这个工具不是开源的。 免责声明:我是此工具的开发人员之一。
NDepend建议写Code Rule over LINQ Query (CQLinq)。提议大约200 default code rules,其中3个专门用于未使用/死代码检测:
NDepend集成在Visual Studio中,因此这些规则可以是checked/browsed/edited right inside the IDE。该工具还可以集成到您的CI流程中,它可以构建reports,显示违反的规则和罪魁祸首代码元素。
如果单击上面这三条链接指向这些规则的源代码,您会看到有关类型和方法的链接有点复杂。这是因为它们不仅检测未使用的类型和方法,还检测未使用的死类型和方法(递归)仅使用 的类型和方法。
这是静态分析,因此规则名称中的前缀可能。如果代码元素仅通过反射 使用,则这些规则可能会将其视为未使用,而不是这种情况。
除了使用这三条规则外,我还建议通过测试来测量代码覆盖率并努力实现全面覆盖。通常,您会看到测试无法覆盖的代码实际上是 unused / dead 代码,可以安全地丢弃。这在复杂的算法中尤其有用,因为不清楚代码的分支是否可达。