有没有可能从NDepend分析中排除整个命名空间?

11

我有一个设置,其中Visual Studio 2010运行测试覆盖率分析,并且在集成构建期间,其输出被NDepend吸收。

一些程序集包含需要被NDepend忽略的生成代码。
有没有办法做到这一点?最好是整个命名空间。

2个回答

5

Code Query and Rule over LINQ (CQLinq)确实提供了一个功能来忽略生成的代码

有一个方便的预定义域,名称为JustMyCode,类型为ICodeBaseView

JustMyCode代表了CQLinq的一种功能,可以从CQLinq查询结果中消除生成的代码元素。例如,以下查询仅匹配不是由工具(如UI设计器)生成的大型方法:

from m in JustMyCode.Methods where m.NbLinesOfCode > 30 select m

生成的代码元素集由以CQLinq关键字 notmycode为前缀的查询定义。例如,下面的查询匹配源文件中名称以".designer.cs"结尾的方法:
notmycode from m in Methods where
  m.SourceFileDeclAvailable && 
  m.SourceDecls.First().SourceFile.FileName.ToLower().EndsWith(".designer.cs")
select m

CQLinq查询运行器在依赖于JustMyCode的查询之前执行所有notmycode查询,因此JustMyCode域只定义一次。很明显,如果notmycode查询依赖于JustMyCode域,则CQLinq编译器会发出错误。有四个默认的notmycode查询,可以轻松地适应您的需求。请注意,没有默认的notmycode查询用于命名空间,但是您可以创建自己的查询。

Patrick,您能详细说明一下如何修改用于生成项目指标的所有CQL查询吗?我可以看到嵌入在项目文件中的编码查询,但是我找不到在UI中修改它们的位置! - rbellamy
只需启动VisualNDepend.exe,对您的NDepend项目进行分析或加载NDepend项目的最新分析结果,然后查看“CQL查询浏览器”面板,这是您可以浏览查询和规则并编辑它们的地方。 - Patrick from NDepend team
我指的是一次性更改所有查询的能力。使用案例-使用“复制到剪贴板默认CQL查询”在“CQL查询编辑”选项中复制所有查询。然后,使用所选的正则表达式工具修改所有查询以忽略特定命名空间或遵守NDepend [Generated]属性,或者您想要对CQL语句的标准进行的任何其他全局更改。现在,我如何轻松地用这些更新/修改后的查询替换NDepend项目的默认查询? - rbellamy
实际上,您可以从“CQL查询浏览器”中复制/粘贴到“组”,使用XML格式在剪贴板中,您可以复制此XML,进行修改,然后粘贴。 - Patrick from NDepend team
我已经让它工作了...然后遇到了一个问题,无法使用连接来排除带有System.CodeDom.Compiler.GeneratedCode属性的类型。但是,对于OP的目的,您的建议完全可以胜任。 - rbellamy

1
在“重构方法快速概述”中发现了这个。
// Here are some ways to avoid taking account of generated methods.
!( NameIs "InitializeComponent()" OR
   // NDepend.CQL.GeneratedAttribute is defined in 
   // the redistributable assembly $NDependInstallDir$\Lib\NDepend.CQL.dll
   // You can define your own attribute to mark "Generated".
   HasAttribute "OPTIONAL:NDepend.CQL.GeneratedAttribute") 

但这并没有解决修改每个CQL查询以确保它们都忽略生成代码的需求。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接