问题描述
我当前正在尝试使用NDepend来识别(我们的)代码,该代码使用特定组引用程序集中的[过时]标记成员(在我的示例中以“ Microsoft.TeamFoundation。 *”开头) )和“我们的代码”,是指我们在上述参考程序集列表中调用/使用[过时]成员的成员。理想情况下,我会得到我们的Type及其成员的精确列表,但是如果我真正拥有这些类型中那些[过时]成员用法的实际计数,我也将很好用
该想法是一次性分析我们拥有的[过时]成员调用/使用的数量,然后将其集成到CI管道中,以跟踪随着时间的推移该数量的减少。
任何类似的指导或示例代码将受到高度赞赏。
解决方法
您可以尝试以下代码查询:
let obsoleteTMF = TypesAndMembers.Where(x => x.IsObsolete).ToHashSetEx()
from c in Application.Types.Concat<IUser>(Application.Methods).UsingAny(obsoleteTMF)
select new {
typeOrMethod = (ICodeElement)c,obsoleteUsed = c.IsType?
c.AsType.TypesUsed.Intersect(obsoleteTMF) :
c.AsMethod.MethodsCalled
.Concat<IMember>(c.AsMethod.FieldsUsed)
.Intersect(obsoleteTMF)
}
由于对Concat()
的调用,此查询可同时处理类型和方法。 .ToHashSetEx()
用于加快对Intersect()
的呼叫。
它是这样工作的: