Intentando encontrar todos los métodos que no tengan una dependencia directa en Microsoft.sharepoint.* O System.Web.UI.*

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

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);
    ...
}
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top