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