【发布时间】:2011-01-23 15:45:37
【问题描述】:
我试图让 NDepend 使用标准“方法太大”查询的修改版本来识别长方法。
我不想报告开发人员几乎无法控制的长方法,因此我使用DebuggerNonUserCode 属性和InitializeComponent() 过滤掉生成的代码。
不幸的是,我仍然得到一些误报,因为生成类型中的方法也会被报告。问题是,虽然类型本身具有 DebuggerNonUserCode 属性,但方法没有,因此尽管它们是生成的,但它们仍包含在输出中。
我正在寻找类型和方法之间的连接之类的东西:给我所有没有 DebuggerNonUserCode 属性的类型并在这些类型上运行查询,但我不知道如何在 CQL 中表达这一点。
对于某些程序集,我可以简单地过滤全名,但不幸的是,我们的一些程序集混合了开发人员制作和生成的类型。不幸的是,IsGeneratedByCompiler 在这种情况下也不能使用。
我的查询
WARN IF Count > 0 IN SELECT METHODS WHERE
NbLinesOfCode > 30 AND
!HasAttribute "System.Diagnostics.DebuggerNonUserCodeAttribute" AND
!NameIs "InitializeComponent()"
ORDER BY NbLinesOfCode DESC
【问题讨论】:
-
我找不到任何一种方法来加入方法和输入信息,甚至 V3 的发行说明也没有提到这一点。
-
你试过 IsGeneratedByCompiler 方法属性吗?
-
@Timores:没错,我希望我能将两者结合起来。我还没有看过 IsGeneratedByCompiler。从文档来看,它似乎没有起到作用。但无论如何我都会试一试并更新问题。
-
我已经向 NDepend 的支持发送了一个请求。当我得到一些东西时,我会更新评论或发布答案。