簡體   English   中英

如何編寫代碼分析(FxCop)規則來阻止方法調用

[英]How to write Code Analysis (FxCop) rule to prevent a method call

如何為vs2008編寫代碼分析工具以防止特定的框架調用,例如GC.WaitForFullGCComplete()或Application.DoEvents()

我嘗試在我的自定義規則中覆蓋VisitMethodCall,但我無法弄清楚Microsoft.FxCop.Sdk.MethodCall參數在其中的真正含義。 無法在網絡上找到示例。

有人能指出我正確的方向嗎?

使用您嘗試查找和阻止的方法簽名替換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;
    }

我記得一本調試書 ,我認為它有一章關於FXCop規則,並討論了如何編寫一本。 對於我的生活,我找不到我的副本。 我懷疑你需要反射器

編寫FxCop規則的一個替代方法是使用NDepend工具。 這個工具允許通過C#LINQ查詢編寫代碼規則 我們稱之為CQLinq 免責聲明:我是該工具的開發人員之一

默認情況下,提出了200多個代碼規則 由於眾所周知的 C#LINQ語法,自定義現有規則或創建自己的規則非常簡單。

如何為vs2008編寫代碼分析工具以防止特定的框架調用,例如GC.WaitForFullGCComplete()或Application.DoEvents()

對於這個特殊需求,簡單的以下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報告中 在Visual Studio和Build Process時間實時驗證規則。

雖然它與NDepend,甚至FxCop本身都不匹配,但我在這里發布了一個非常輕量級的方法,它適用於簡單的事情,例如阻止對特定方法的調用: http//activesharp.codeplex.com/wikipage?title =使用%20ActiveSharp%20AS%20A%20Unit%20Test%20Tool

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM