Cercando di trovare tutti i metodi che non hanno una dipendenza diretta da Microsoft.SharePoint.* O System.Web.Ui.*
-
28-10-2019 - |
Domanda
Sto cercando di scrivere una query CQL in Visual NDEPER per trovare tutti i tipi e i metodi che non dipendono direttamente da alcun tipo da un elenco di spazi dei nomi.
La query che ho costruito finora è questa:
SELECT METHODS
WHERE
!IsDirectlyUsing "NAMESPACE:Microsoft.*"
AND !IsDirectlyUsing "NAMESPACE:System.Web.UI.*"
AND !FullNameLike ".Test"
AND !HasAttribute "System.CodeDom.Compiler.GeneratedCodeAttribute"
AND FullNameLike "OurOwnNameSpaceHere"
Ma questo restituisce ancora metodi che accettano uno SPWeb come parametro, quindi devo perdere qualcosa.
Quindi voglio:
Escludi qualsiasi metodo che dipende da qualsiasi tipo all'interno di qualsiasi gruppo referenziato che si trova all'interno di uno spazio dei nomi Microsoft.*.
Escludi qualsiasi metodo che dipende da qualsiasi tipo all'interno di qualsiasi gruppo referenziato che si trova all'interno di un sistema.web.ui.* Spazio nomi.
escludere qualsiasi metodo/tipo generato
Escludi qualsiasi metodo che faccia parte di un progetto che ha test nello spazio dei nomi.
Metodi di esempio che cadono sono:
public void SomeMethod(SPWeb web)
{
... // other code here
SomeOtherMethod(web);
...
}
Soluzione
Puoi provare quanto segue query di codice su LINQ (query 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 condizione escludere qualsiasi metodo/tipo generato è gestito dal fatto che Usiamo JustMyCode.
Quindi, quali metodi o campi di SPWeb
vengono ancora utilizzati dal metodo ancora abbinato? NDEpend può rilevare che un metodo utilizza un tipo solo se utilizza un membro del tipo.