Попытка найти все методы, которые не имеют прямой зависимости от Microsoft.SharePoint. * Или System.Web.UI. * - PullRequest
2 голосов
/ 06 декабря 2011

Я пытаюсь написать CQL-запрос в Visual NDepend, чтобы найти все типы и методы, которые напрямую не зависят от какого-либо типа, из списка пространств имен.

Запрос, который я создал до сих порэто:

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. *.

  • исключает любой метод, который зависит от любого типа внутри любой ссылкиСборка, которая находится внутри пространства имен System.Web.Ui. *.

  • исключает любой сгенерированный метод / тип

  • исключает любой метод, являющийся частьюпроекта, который имеет Test в пространстве имен.

Примеры методов, которые проваливаются:

public void SomeMethod(SPWeb web)
{
    ... // other code here
    SomeOtherMethod(web);
    ...
}

1 Ответ

1 голос
/ 06 декабря 2011

Вы можете попробовать следующий запрос кода через LINQ (запрос CQLinq) :

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 используются методом, все еще соответствующим?NDepend может обнаружить, что метод использует тип, только если он использует член типа.

...