Попытка найти все методы, которые не имеют прямой зависимости от Microsoft.служба SharePoint.* или система.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.*


Я пытаюсь написать 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.* пространство имен.

  • Исключите любой метод, зависящий от любого типа внутри любой ссылочной сборки, которая находится внутри системы.Сеть.Пользовательский интерфейс.* пространство имен.

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

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

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

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

1 ответ:

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