7

標準の「メソッドが大きすぎます」クエリの修正バージョンを使用して、NDependに長いメソッドを識別させようとしています。

開発者がほとんど制御できない長いメソッドを報告したくないので、DebuggerNonUserCode属性とを使用して生成されたコードを除外しますInitializeComponent()

残念ながら、生成されたタイプのメソッドも報告されるため、まだいくつかの誤検知が発生します。問題は、型自体にはDebuggerNonUserCode属性がありますが、メソッドにはないため、生成されているにもかかわらず、出力に含まれていることです。

タイプとメソッド間の結合のようなものを探しています。属性を持たないすべてのタイプを指定して、DebuggerNonUserCodeそれらに対してクエリを実行しますが、CQLでこれを表現する方法がわかりません。

一部のアセンブリでは、フルネームで簡単にフィルタリングできますが、残念ながら、一部のアセンブリでは、開発者が作成したタイプと生成されたタイプが混在しています。残念ながら、IsGeneratedByCompilerこの場合も使用できません。

私の質問

WARN IF Count > 0 IN SELECT METHODS WHERE 
   NbLinesOfCode > 30 AND
   !HasAttribute "System.Diagnostics.DebuggerNonUserCodeAttribute" AND
   !NameIs "InitializeComponent()"
   ORDER BY NbLinesOfCode DESC
4

2 に答える 2

0

私は NDepend をとても気に入っていますが、名前空間/型/メソッド情報を単一のクエリに結合できないことが最大の欠点です。その機能により、CQL は非常に強力なものになります。

それとは別に、「IsGeneratedByCompiler」および「IsInFrameworkAssembly 」のチェックが役立つ場合があります。クエリから特定の名前空間を削除することもできます ( OUT OF NAMESPACES "..." )

于 2010-03-04T14:11:49.183 に答える