我按照我在本网站上找到的分步说明,在C#中编写了一些自定义规则.当我尝试在visual-studio-2013中运行代码分析时,我在CA结果窗格中收到CA0054错误.
我想调试我的规则,因为显然会抛出异常.但是,我无法弄清楚如何做到这一点.我试图将一个新的Visual Studio实例附加到另一个正在运行的实例,但它不起作用.
Web上有很多关于调试自定义规则的资源,但它们都是针对旧版本的FxCop,具有单独的GUI和所有内容.我不认为这与我的案件有关.
我在这里错过了什么吗?
是否有一种相当简单的方法让FxCop检查所有程序集是否声明了特定的属性值?我想确保每个人都更改了创建项目时的默认值:
[assembly: AssemblyCompany("Microsoft")] // fail
[assembly: AssemblyCompany("FooBar Inc.")] // pass
Run Code Online (Sandbox Code Playgroud) 我想创建一个应用方法的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) 我正在尝试编写一个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的神奇之处还是我错过了一些明显的东西?