2

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

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

有没有办法为程序集中的所有方法获取此信息?

4

1 回答 1

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()来阐述更复杂的解决方案,但这里没有必要)。

在此处输入图像描述


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

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 }
于 2012-11-16T14:58:29.243 回答