我正在尝试在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作为参数的方法,所以我必须遗漏一些东西。
所以我想:
排除依赖于Microsoft。*命名空间内任何引用的Assembly内的任何类型的任何方法。
排除依赖于System.Web.Ui。*命名空间内任何引用的Assembly内的任何类型的任何方法。
排除任何生成的方法/类型
排除属于名称空间中包含Test的项目的任何方法。
落实的样本方法是:
public void SomeMethod(SPWeb web)
{
... // other code here
SomeOtherMethod(web);
...
}
答案 0 :(得分:1)
您可以尝试以下code query over 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
条件排除任何生成的方法/类型由we use JustMyCode的事实处理。
然后,该方法使用的SPWeb
哪些方法或字段仍匹配?
NDepend只有在使用类型的成员时才能检测到方法是否使用了类型。