繁体   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