尝试查找不直接依赖于 Microsoft.SharePoint.* 或 System.Web.UI 的所有方法。



我正试图在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的哪些方法或字段?

相关内容

最新更新