使用 NDepend 使用 [Obsolete] 标记的程序集列表代码查找代码
Find code using [Obsolete] marked code of a list of assemblies using NDepend
我目前正在尝试使用 NDepend 来识别(我们的)代码,这些代码使用了特定引用程序集组的 [Obsolete] 标记成员(在我的示例中以“Microsoft.TeamFoundation 开头)。 *") 和“我们的代码”是指我们的成员调用/使用上述参考程序集列表中的 [Obsolete] 成员。理想情况下,我会得到我们的类型及其成员的精确列表,但如果我有这些类型中那些 [Obsolete] 成员用法的实际计数,我也可以只使用我们的类型
我们的想法是对我们拥有的[过时]成员calls/usages的数量进行一次性分析,然后将其整合到一个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()
.
的调用
它是这样工作的:
我目前正在尝试使用 NDepend 来识别(我们的)代码,这些代码使用了特定引用程序集组的 [Obsolete] 标记成员(在我的示例中以“Microsoft.TeamFoundation 开头)。 *") 和“我们的代码”是指我们的成员调用/使用上述参考程序集列表中的 [Obsolete] 成员。理想情况下,我会得到我们的类型及其成员的精确列表,但如果我有这些类型中那些 [Obsolete] 成员用法的实际计数,我也可以只使用我们的类型
我们的想法是对我们拥有的[过时]成员calls/usages的数量进行一次性分析,然后将其整合到一个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()
.
它是这样工作的: