我试图使用NDepend及其基于Linq的查询语言来生成关于代码当前状态的一些报告。我想用预定义的“标记”标记我的一些方法和类,例如标记为" database“的方法包含特定于数据库的代码,标记为"Algorithm_X”的方法包含与算法"X“相关的特定逻辑。我们认为,这样的标记程序将导致更直接的文档生成过程。
我想知道NDepend是否提供了一种机制来促进这样的过程。我正在考虑使用C#属性来生成这样的自定义标记,然后用相应的属性标记方法,这些属性对应于“标记”它们。我非常了解CQLinq的“CQLinq”方法,并积极使用它。但是这个标记过程需要一种方法来列出或枚举与一个方法相关联的所有属性,到目前为止,我还没有使用NDepend实现它。
我的问题是,是否有一种方法可以在NDepend中实现(列出方法的所有属性)?如果没有,在NDepend中是否有其他方法可以促进这样的标记过程?我可以通过编写自定义的C#代码来使用反射来实现这一点,但我希望确保在这种状态下,我已经没有NDepend选项了。
发布于 2015-07-13 10:38:10
您实际上可以列出用NDepend LINQ代码查询标记方法的属性,但它既不简单,也不快。我们计划改进NDepend代码模型中的属性支持,这是在NDepend用户语音上被问到的。
因此,下面的查询可以工作,但在大型代码基础上可能需要几秒钟时间(对于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 } https://stackoverflow.com/questions/31379030
复制相似问题