首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.net组件的静态分析

.net组件的静态分析
EN

Stack Overflow用户
提问于 2009-11-04 15:28:01
回答 6查看 1.7K关注 0票数 3

我有一个C#项目,我需要找到所有的私有方法,这些方法不是直接或间接从任何其他公共方法调用的。

此外,对于从公共方法调用的每个私有方法,我需要知道它是哪个公共方法。然后,我将确定该方法是否真的是从类的客户端调用的,如果不是,我将能够删除它。

在过去,我使用的是Lutz Rorder的代码,它是Reflector的基础-它有一个分析IL代码的选项,并在它上面给出了对象模型。我现在找不到这个代码。

有什么建议吗?也许可以指向Lutz Rorder代码?

Saar

EN

回答 6

Stack Overflow用户

发布于 2010-04-19 04:55:49

你应该去看看Nitriq Static Code Analysis for .Net --他们有一个免费的社区版,而且他们的成熟的许可证是相当合理的。

票数 3
EN

Stack Overflow用户

发布于 2010-09-01 22:35:06

正如托马斯所指出的,NDepend工具可以帮助您在.NET代码库中查找未使用的代码。免责声明:我是这个工具的开发者之一。

NDepend建议编写Code Rule over LINQ Query (CQLinq)。围绕200 default code rules提出,其中3个专门用于未使用/死代码检测:

  • Potentially dead Types (因此检测未使用的类、结构、接口、delegate...)
  • Potentially dead Methods (因此检测未使用的方法、ctor、属性getter/setter...)
  • Potentially dead Fields

在Visual Studio中集成了NDepend,因此这些规则可以是checked/browsed/edited right inside the IDE。该工具还可以集成到您的CI流程中,它可以构建reports,以显示违反规则和罪魁祸首的代码元素。

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

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

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

此外,对于从公共方法调用的每个私有方法,我需要知道它是哪个公共方法。

要获取此信息,使用CQLinq时,您只需编写:

代码语言:javascript
复制
from m in Application.Methods
where m.IsPrivate
let publicMethodsCallingMe = m.MethodsCallingMe.Where(m1 => m1.IsPublic)
where publicMethodsCallingMe.Count() > 0
select new { m, publicMethodsCallingMe }

查询结果将很容易浏览:

票数 3
EN

Stack Overflow用户

发布于 2009-11-04 15:52:38

嗯,做这件事的唯一方法(至少是我所知道的唯一方法……)暗示使用商业(但不是很贵)工具,即NDepend

除此之外,您还可以针对已编译的程序集编写类似SQL的查询,这允许进行非常细粒度的分析。他们称之为CQL,语法是自解释的,NDepend的智能感知/自动完成支持以及通用的帮助/文档都很好。

(AFAIK他们还提供了一个功能齐全的试用,如果这对你有帮助的话…)

哈!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1672192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档