试图找到所有与Microsoft.SharePoint。*或System.Web.UI没有直接依赖关系的方法。*

时间:2011-12-06 12:49:17

标签: .net architecture code-analysis ndepend cql

我正在尝试在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);
    ...
}

1 个答案:

答案 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只有在使用类型的成员时才能检测到方法是否使用了类型。