我正试图在Visual NDepend中编写一个CQL查询,以查找不直接依赖于名称空间列表中任何类型的所有类型和方法。
到目前为止我建立的查询是:
SELECT METHODS
WHERE
!IsDirectlyUsing "NAMESPACE:Microsoft.*"
AND !IsDirectlyUsing "NAMESPACE:System.Web.UI.*"
AND !FullNameLike ".Test"
AND !HasAttribute "System.CodeDom.Compiler.GeneratedCodeAttribute"
AND FullNameLike "OurOwnNameSpaceHere"
但是这仍然返回接受SPWeb作为参数的方法,所以我一定错过了什么。
所以我想:
排除任何依赖于任何引用程序集中的任何类型的方法。*名称空间。
排除任何依赖于System.Web.Ui中任何引用的程序集中的任何类型的方法。*名称空间。
排除任何生成的方法/类型
排除在命名空间中有Test的项目中的任何方法。
失败的示例方法有:
public void SomeMethod(SPWeb web)
{
... // other code here
SomeOtherMethod(web);
...
}
您可以尝试以下代码查询LINQ (CQLinq query):
let dontUseTypes = Namespaces
.WithNameWildcardMatchIn("Microsoft.*", "System.Web.UI.*")
.ChildTypes()
from m in JustMyCode.Methods.Except(Methods.UsingAny(dontUseTypes))
where !m.ParentAssembly.Name.ToLower().Contains("test")
select m
条件排除任何生成的方法/类型是由我们使用JustMyCode来处理的。
那么,仍然匹配的方法使用了SPWeb
的哪些方法或字段?