6

GC.WaitForFullGCComplete() や Application.DoEvents() などの特定のフレームワーク呼び出しを防ぐために、vs2008 用のコード分析ツールを作成するにはどうすればよいですか?

カスタム ルールで VisitMethodCall をオーバーライドしようとしましたが、Microsoft.FxCop.Sdk.MethodCall パラメーターに実際に何が含まれているかわかりません。ウェブ上で例が見つかりませんでした。

誰かが私を正しい方向に向けることができますか?

4

4 に答える 4

3

System.Web.HttpUtility.HtmlEncode(System.String)見つけて防止しようとしているメソッド シグネチャに置き換えます。

    public override ProblemCollection Check(Member member)
    {
        if (member is Method)
        {
            var callees = new List<Method>(Callees.CalleesFor((Method)member));
            foreach (var callee in callees)
            {
                if (callee.FullName == "System.Web.HttpUtility.HtmlEncode(System.String)")
                {
                    Problems.Add(new Problem(GetResolution()));
                }
            }
        }

        return Problems;
    }
于 2011-11-16T20:00:24.060 に答える
0

FXCopルールに関する章があり、その書き方について説明したデバッグの本を覚えています。私の人生のために、私は自分のコピーを見つけることができません。反射板が必要になると思います

于 2009-03-16T06:44:49.867 に答える
-2

FxCopルールを作成するという混乱の代わりに、ツールNDependを使用することもできます。このツールを使用すると、C#LINQクエリでコードルールを記述できます。 これをCQLinqと呼びます免責事項:私はツールの開発者の1人です

デフォルトでは、200を超えるコードルールが提案されています。よく知られているC#LINQ構文のおかげで、既存のルールをカスタマイズしたり、独自のルールを作成したりするのは簡単です。

GC.WaitForFullGCComplete()やApplication.DoEvents()などの特定のフレームワーク呼び出しを防ぐために、vs2008のコード分析ツールを作成するにはどうすればよいですか。

この特定のニーズには、次の単純なCQLinqルールで十分です(このルールをどのような状況でも機能させるには、 AllowNoMatch()の使用法に注意してください)。

// <Name>Don't call these methods</Name>
warnif count > 0
from m in Methods 
where m.IsUsing ("System.GC.WaitForFullGCComplete()".AllowNoMatch()) ||
      m.IsUsing ("System.GC.WaitForFullGCComplete(Int32)".AllowNoMatch()) ||
      m.IsUsing ("System.Windows.Forms.Application.DoEvents()".AllowNoMatch())
select m

CQLinqクエリはVisualStudioでライブ編集でき、結果ブラウジング機能を使用して即座に結果を提供します。

ここに画像の説明を入力してください

生成されたHTML+javascriptレポートで、ルールがVisualStudioでライブおよびビルドプロセス時に検証できることを正確に説明します。

于 2010-10-19T12:35:07.650 に答える
-3

NDepend や FxCop 自体に匹敵するものではありませんが、特定のメソッドの呼び出しを防ぐなどの単純なことに適した非常に軽量なアプローチをここに投稿しました: http://activesharp.codeplex.com/wikipage?title= Using%20ActiveSharp%20as%20a%20Unit%20Test%20Tool

于 2010-12-30T03:36:19.387 に答える