2

Visual NDepend で CQL クエリを記述して、名前空間のリストから任意の型に直接依存しないすべての型とメソッドを見つけようとしています。

これまでに作成したクエリは次のとおりです。

SELECT METHODS
WHERE 
   !IsDirectlyUsing "NAMESPACE:Microsoft.*"
   AND !IsDirectlyUsing "NAMESPACE:System.Web.UI.*"
   AND !FullNameLike ".Test"
   AND !HasAttribute "System.CodeDom.Compiler.GeneratedCodeAttribute"
   AND FullNameLike "OurOwnNameSpaceHere"

しかし、これでも SPWeb をパラメーターとして受け入れるメソッドが返されるため、何か不足しているに違いありません。

だから私はしたい:

  • Microsoft.* 名前空間内にある参照アセンブリ内の任意の型に依存するメソッドを除外します。

  • System.Web.Ui.* 名前空間内にある参照アセンブリ内の任意の型に依存するメソッドを除外します。

  • 生成されたメソッド/タイプを除外する

  • 名前空間に Test があるプロジェクトの一部であるメソッドを除外します。

失敗するサンプル メソッドは次のとおりです。

public void SomeMethod(SPWeb web)
{
    ... // other code here
    SomeOtherMethod(web);
    ...
}
4

1 に答える 1

1

LINQ 経由で次のコード クエリを試すことができます (CQLinq クエリ) :

let dontUseTypes = Namespaces
                   .WithNameWildcardMatchIn("Microsoft.*", "System.Web.UI.*")
                   .ChildTypes()

from m in JustMyCode.Methods.Except(Methods.UsingAny(dontUseTypes))
where !m.ParentAssembly.Name.ToLower().Contains("test")
select m

生成されたメソッド/タイプを除外する条件は、 JustMyCode を使用するという事実によって処理されます。

次に、どのメソッドまたはフィールドがメソッドSPWebによって使用されているか? NDepend は、メソッドが型のメンバーを使用している場合にのみ、その型を使用していることを検出できます。

于 2011-12-06T14:14:45.420 に答える