Essayer de trouver toutes les méthodes qui n'ont pas de dépendance directe sur Microsoft.SharePoint. * Ou System.Web.UI. *
-
28-10-2019 - |
Question
J'essaie d'écrire une requête CQL dans Visual NDepend pour trouver tous les types et méthodes qui ne dépendent directement d'aucun type dans une liste d'espaces de noms.
La requête que j'ai créée jusqu'à présent est celle-ci:
SELECT METHODS
WHERE
!IsDirectlyUsing "NAMESPACE:Microsoft.*"
AND !IsDirectlyUsing "NAMESPACE:System.Web.UI.*"
AND !FullNameLike ".Test"
AND !HasAttribute "System.CodeDom.Compiler.GeneratedCodeAttribute"
AND FullNameLike "OurOwnNameSpaceHere"
Mais cela renvoie toujours des méthodes qui acceptent un SPWeb comme paramètre, donc je dois manquer quelque chose.
Je veux donc:
-
exclut toute méthode qui dépend de n'importe quel type à l'intérieur de tout Assembly référencé qui se trouve dans un espace de noms Microsoft. *.
-
exclut toute méthode qui dépend de n'importe quel type à l'intérieur de tout Assembly référencé qui se trouve dans un espace de noms System.Web.Ui. *.
-
exclure toute méthode / type généré
-
exclut toute méthode faisant partie d'un projet ayant Test dans l'espace de noms.
Des exemples de méthodes qui échouent sont:
public void SomeMethod(SPWeb web)
{
... // other code here
SomeOtherMethod(web);
...
}
La solution
Vous pouvez essayer la requête de code sur LINQ (requête 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
La condition excluant toute méthode / type généré est gérée par le fait que nous utilisons JustMyCode .
Ensuite, quelles méthodes ou quels champs de SPWeb
sont utilisés par la méthode toujours correspondante?
NDepend peut détecter qu'une méthode utilise un type uniquement si elle utilise un membre du type.