NDepend:列出附加到方法的属性,这可能吗?
NDepend: Listing the attributes attached to a method, is it possible?
我正在尝试使用 NDepend 及其基于 Linq 的查询语言来生成一些有关代码当前状态的报告。我想用预定义的 "tags" 标记我的一些方法和 类,例如标记为 "Database" 的方法包含数据库特定代码,标记为 "Algorithm_X" 的方法包含与算法相关的特定逻辑 "X"。我们认为这样的标记程序将导致更直接的文档生成过程。
我想知道 NDepend 是否提供了一种机制来促进这样的过程。我正在考虑使用 C# Attributes 来生成这样的自定义标签,然后使用对应于 "tagging" 它们的适当属性来标记方法。我很清楚 CQLinq 的“.HasAttribute”方法并积极使用它。但是这个标记程序需要一种方法来列出或枚举所有附加到方法的属性,直到现在我才使用 NDepend 实现它。
我的问题是;有没有办法在 NDepend 中实现它(列出方法的所有属性)?如果没有,NDepend 中是否有另一种方法可以促进这种标记过程?我可以通过编写自定义 C# 代码使用 Reflections 来实现这一点,但我想确保在此状态下我无法使用 NDepend 的选项。
您实际上可以列出使用 NDepend LINQ code querying (CQLINQ) but it is not straightforward nor fast. We plan to improve attributes support in the NDepend code model, it has been asked on the NDepend User Voice 标记方法的属性。
因此以下查询有效,但在大型代码库上可能需要几秒钟(这对于 NDepend 来说很慢,通常查询在几毫秒内执行):
let typesAttributes = Types.Where(t => t.IsAttributeClass)
from m in Methods
let mAttributes = typesAttributes.Where(t => m.HasAttribute(t)).ToArray()
where mAttributes .Length > 0
select new { m, mAttributes }
下面的优化通常会使它 运行 快两倍。
let typesAttributes = Types.Where(t => t.IsAttributeClass)
from m in Types.UsingAny(typesAttributes).ChildMethods()
let mAttributes = typesAttributes.Where(t => m.HasAttribute(t)).ToArray()
where mAttributes .Length > 0
select new { m, mAttributes }
我正在尝试使用 NDepend 及其基于 Linq 的查询语言来生成一些有关代码当前状态的报告。我想用预定义的 "tags" 标记我的一些方法和 类,例如标记为 "Database" 的方法包含数据库特定代码,标记为 "Algorithm_X" 的方法包含与算法相关的特定逻辑 "X"。我们认为这样的标记程序将导致更直接的文档生成过程。
我想知道 NDepend 是否提供了一种机制来促进这样的过程。我正在考虑使用 C# Attributes 来生成这样的自定义标签,然后使用对应于 "tagging" 它们的适当属性来标记方法。我很清楚 CQLinq 的“.HasAttribute”方法并积极使用它。但是这个标记程序需要一种方法来列出或枚举所有附加到方法的属性,直到现在我才使用 NDepend 实现它。
我的问题是;有没有办法在 NDepend 中实现它(列出方法的所有属性)?如果没有,NDepend 中是否有另一种方法可以促进这种标记过程?我可以通过编写自定义 C# 代码使用 Reflections 来实现这一点,但我想确保在此状态下我无法使用 NDepend 的选项。
您实际上可以列出使用 NDepend LINQ code querying (CQLINQ) but it is not straightforward nor fast. We plan to improve attributes support in the NDepend code model, it has been asked on the NDepend User Voice 标记方法的属性。
因此以下查询有效,但在大型代码库上可能需要几秒钟(这对于 NDepend 来说很慢,通常查询在几毫秒内执行):
let typesAttributes = Types.Where(t => t.IsAttributeClass)
from m in Methods
let mAttributes = typesAttributes.Where(t => m.HasAttribute(t)).ToArray()
where mAttributes .Length > 0
select new { m, mAttributes }
下面的优化通常会使它 运行 快两倍。
let typesAttributes = Types.Where(t => t.IsAttributeClass)
from m in Types.UsingAny(typesAttributes).ChildMethods()
let mAttributes = typesAttributes.Where(t => m.HasAttribute(t)).ToArray()
where mAttributes .Length > 0
select new { m, mAttributes }