【问题标题】:Find code using [Obsolete] marked code of a list of assemblies using NDepend使用 NDepend 的程序集列表的 [Obsolete] 标记代码查找代码
【发布时间】:2020-10-22 19:31:50
【问题描述】:

我目前正在尝试使用 NDepend 来识别(我们的)代码,该代码使用 [Obsolete] 标记的特定引用程序集组的成员(在我的示例中以“Microsoft.TeamFoundation.*”开头) 并且“我们的代码”是指我们的成员在所述参考程序集列表中调用/使用 [Obsolete] 成员。理想情况下,我会得到我们的类型及其成员的精确列表,但如果我有这些类型中那些 [Obsolete] 成员用法的实际计数,我也可以只使用我们的类型

我们的想法是一次性分析我们拥有的 [Obsolete] 成员调用/使用的数量,然后将其集成到 CI 管道中,以跟踪随着时间的推移而减少的情况。

任何指导或示例代码做类似的事情将不胜感激。

【问题讨论】:

  • 您还可以启用警告 618。这是为每次使用过时方法生成的。

标签: .net analysis ndepend


【解决方案1】:

你可以试试这个代码查询:

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() 的调用。

它是这样工作的:

【讨论】:

    猜你喜欢
    • 2012-03-03
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    相关资源
    最近更新 更多