nDepend为程序集中的所有方法查询直接间接方法

时间:2012-11-14 20:22:25

标签: cql ndepend

我正在尝试使用nDepend提供的CQL检索程序集中所有方​​法的所有直接间接方法调用。 问题是我无法遍历程序集中的所有方法来获取此信息。

DepthOfIsUsedBy只允许字符串类型而不是字符串集合。

有没有办法获得程序集中所有方​​法的信息?

1 个答案:

答案 0 :(得分:0)

如何使用方法DepthOfIsUsing()代替DepthOfIsUsedBy():o)

from m in Assemblies.WithNameNotIn("nunit.uikit").ChildMethods() 
let depth0 = m.DepthOfIsUsing("nunit.uikit")
where depth0  >= 0 orderby depth0
select new { m, depth0 }

此查询已通过以下菜单生成。 (顺便说一句,一个更复杂的解决方案可以用魔术方法FillIterative()来阐述,但这里没有必要。)

enter image description here


考虑到Prasad的评论,尝试这个列出所有直接&的查询怎么样?来自A的间接呼叫者,对于B的每种方法:

from m in Assemblies.WithNameIn("AsmB").ChildMethods()
where m.IsPubliclyVisible // Optimization
let indirectcallers = m.MethodsCallingMe
                      .FillIterative(
                          callers => callers.SelectMany(m1 => m1.MethodsCallingMe))
                      .DefinitionDomain
                      .Where(m1 => m1.ParentAssembly.Name == "AsmA")
                      .ToArray()  // Avoid double enumeration
where indirectcallers.Length > 0
orderby indirectcallers.Length descending
select new { m, indirectcallers }