6

如何为vs2008编写代码分析工具,防止特定框架调用,如GC.WaitForFullGCComplete()或Application.DoEvents()

我尝试在我的自定义规则中覆盖 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免责声明:我是该工具的开发人员之一

默认提出超过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 中实时编辑,并提供即时结果,并具有结果浏览功能:

在此处输入图像描述

让我们准确地说,规则可以在 Visual Studio 中实时验证,并且在构建过程时,在生成的 HTML+javascript 报告中。

于 2010-10-19T12:35:07.650 回答
-3

虽然它与 NDepend 甚至 FxCop 本身都不匹配,但我刚刚在这里发布了一个非常轻量级的方法,它适用于简单的事情,比如阻止对特定方法的调用:http ://activesharp.codeplex.com/wikipage?title=使用%20ActiveSharp%20as%20a%20Unit%20Test%20工具

于 2010-12-30T03:36:19.387 回答