2

NDEPEND CQLリクエストを使用して、コードに品質制限を設定します。

NbParameters>6の選択トップ10メソッドでカウント>0の場合に警告

5つの引数でデリゲートを定義する場合、次に例を示します。

delegate void MyDelegate(IArg arg1, IArg arg2, IArg arg3, IArg arg4, IArg arg5);

次に、ソースコードには存在せず(おそらくコンパイル済みコードには存在する)、2つの追加の引数を持つ関数で品質制約が破られます。

BeginInvoke(IArg, IArg, IArg, IArg, IArg, AsyncCallback,Object)

この障害を回避する方法は?

4

1 に答える 1

2

CQLはこの問題を簡単に解決することはできませんが、NDepend v4以降にリリースされたLINQ上のコードルール(CQLinq)は解決できます。

CQLinqには、 JustMyCodeとは何かを定義する機能が付属しているため、BeginInvoke(IArg、IArg、IArg、IArg、IArg、AsyncCallback、Object)などの生成されたメソッドを削除します。これは次のように説明されています:notmycodeプレフィックスを使用したコードベースビューJustMyCodeの定義

基本的に、デフォルトでカスタマイズ可能なコードルールJustMyCodeから生成された型を破棄するデリゲート型とそのメソッドは常に生成されるため、それらは破棄されます。

// <Name>Discard generated Types from JustMyCode</Name>
// --- Make sure to make this query richer to discard generated types from NDepend rules results ---
notmycode
from t in Application.Types where

  // Resources, Settings, or typed DataSet generated types for example, are tagged with this attribute
  t.HasAttribute ("System.CodeDom.Compiler.GeneratedCodeAttribute".AllowNoMatch()) ||

  // Delegate types are always generated
  t.IsDelegate ||

  // Discard ASP.NET page types generated by aspnet_compiler.exe
  // See: http://www.ndepend.com/FAQ.aspx#ASPNET
  t.ParentNamespace.Name.EqualsAny("ASP", "__ASP") ||

  // Discard generated type ContractException
  t.Name == "__ContractsRuntime+ContractException" ||
  t.FullName == "System.Diagnostics.Contracts.RuntimeContractsAttribute" ||
  t.FullName == "System.Diagnostics.Contracts.__ContractsRuntime" ||

  // Discard all types declared in a folder path containing the word "generated"
  (t.SourceFileDeclAvailable &&
   t.SourceDecls.All(s => s.SourceFile.FilePath.ParentDirectoryPath.ToString().ToLower().Contains("generated")))

select new { t, t.NbILInstructions }
于 2012-06-06T13:24:21.700 に答える