Intentando encontrar todos los métodos que no tengan una dependencia directa en Microsoft.sharepoint.* O System.Web.UI.*
-
28-10-2019 - |
Pregunta
Estoy tratando de escribir una consulta CQL en Visual NDepend para encontrar todos los tipos y métodos que no dependen directamente de ningún tipo de una lista de espacios de nombres.
La consulta que he construido hasta ahora es esta:
SELECT METHODS
WHERE
!IsDirectlyUsing "NAMESPACE:Microsoft.*"
AND !IsDirectlyUsing "NAMESPACE:System.Web.UI.*"
AND !FullNameLike ".Test"
AND !HasAttribute "System.CodeDom.Compiler.GeneratedCodeAttribute"
AND FullNameLike "OurOwnNameSpaceHere"
Pero esto todavía devuelve métodos que aceptan un SPWEB como parámetro, por lo que me falta algo.
Así que quiero:
Excluya cualquier método que dependa de cualquier tipo dentro de cualquier ensamblaje referenciado que esté dentro de un espacio de nombres de Microsoft.*
Excluya cualquier método que dependa de cualquier tipo dentro de cualquier ensamblaje referenciado que esté dentro de un sistema de nombres System.Web.UI.*
excluir cualquier método/tipo generado
Excluya cualquier método que sea parte de un proyecto que tenga una prueba en el espacio de nombres.
Los métodos de muestra que caen son:
public void SomeMethod(SPWeb web)
{
... // other code here
SomeOtherMethod(web);
...
}
Solución
Puedes probar lo siguiente consulta de código sobre Linq (consulta 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 condición excluir cualquier método/tipo generado se maneja por el hecho de que Usamos JustMyCode.
Entonces, qué métodos o campos de SPWeb
son utilizados por el método que aún coincide? NDepend puede detectar que un método usa un tipo solo si está usando un miembro del tipo.