Essayer de trouver toutes les méthodes qui n'ont pas de dépendance directe sur Microsoft.SharePoint. * Ou System.Web.UI. *

StackOverflow https://stackoverflow.com/questions/8400137

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);
    ...
}
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top