标签: fxcop-customrules

如何调试代码分析自定义规则?

我按照我在本网站上找到的分步说明,在C#中编写了一些自定义规则.当我尝试在运行代码分析时,我在CA结果窗格中收到CA0054错误.

我想调试我的规则,因为显然会抛出异常.但是,我无法弄清楚如何做到这一点.我试图将一个新的Visual Studio实例附加到另一个正在运行的实例,但它不起作用.

Web上有很多关于调试自定义规则的资源,但它们都是针对旧版本的FxCop,具有单独的GUI和所有内容.我不认为这与我的案件有关.

我在这里错过了什么吗?

.net c# code-analysis visual-studio fxcop-customrules

8
推荐指数
1
解决办法
1412
查看次数

FxCop:用于检查程序集信息值的自定义规则

是否有一种相当简单的方法让FxCop检查所有程序集是否声明了特定的属性值?我想确保每个人都更改了创建项目时的默认值:

[assembly: AssemblyCompany("Microsoft")] // fail

[assembly: AssemblyCompany("FooBar Inc.")] // pass
Run Code Online (Sandbox Code Playgroud)

c# fxcop fxcop-customrules

6
推荐指数
1
解决办法
884
查看次数

FxCop中的自定义规则仅适用于特定类型方法调用的方法

我想创建一个应用方法的FxRule,只有在从特定类调用该方法时才会这样.

注意:我不想只是将规则应用于特定类的方法,我希望能够处理调用其他方法调用其他方法进行装箱的方法.

我想让FxCop报告与拳击方法相关的问题.

以下是我到目前为止的代码:

using System;
using System.Linq;
using Microsoft.FxCop.Sdk;
using System.Collections.Generic;

class CheckUpdatableComponents : BaseIntrospectionRule
{
    private string[] MethodsToCheck = new string[] { "BeginDraw", "BeginRun", "Draw", "EndRun", "EndDraw", "Update" };

    /// <summary>Gets the base class hooked up.</summary>
    public CheckUpdatableComponents()
        : base("CheckUpdatableComponents", "FxCopRules.Rules", typeof(CheckUpdatableComponents).Assembly)
    {
    }

    public override ProblemCollection Check(string namespaceName, TypeNodeCollection types)
    {
        foreach (var type in types.Where(T => IsSubClassOf(T, "Microsoft.Xna.Framework.Game")))
        {
            foreach (var MethodToCheck in MethodsToCheck)
            {
                Method RunMethod = type.GetMethod(Identifier.For(MethodToCheck));

                if (RunMethod != null)
                {
                    Visit(RunMethod);
                } …
Run Code Online (Sandbox Code Playgroud)

.net c# fxcop fxcop-customrules

5
推荐指数
1
解决办法
3088
查看次数

在FxCop自定义规则中使用SerializationAttribute检测类

我正在尝试编写一个FxCop规则,该规则匹配使用Serializable属性装饰的类,但似乎该属性被忽略.

例如.给出这个样本类

[Serializable]
[Description]
public class ClassWithSerializableMustHaveSerializableBaseClass : BaseClass
{
}
Run Code Online (Sandbox Code Playgroud)

我原以为我的自定义规则中的代码会成功匹配:

    public override ProblemCollection Check(TypeNode type)
    {
        if (type.Attributes.Any(a => a.Type.FullName == typeof(SerializableAttribute).FullName))
        {                
            var problem = new Problem(GetResolution(), type.SourceContext);

            Problems.Add(problem);
        }

        return Problems;
    }
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.如果我将匹配类型更改为DescriptionAttribute,那么它确实有效.有关SerializableAttribute的神奇之处还是我错过了一些明显的东西?

.net c# fxcop fxcop-customrules

3
推荐指数
1
解决办法
117
查看次数