FxCop: custom rule for checking assembly info values

前端 未结 1 624
醉话见心
醉话见心 2021-01-18 07:40

Is there a reasonably simple way to get FxCop to check that all my assemblies declare a particular attribute value? I want to make sure everyone has changed the default you

相关标签:
1条回答
  • 2021-01-18 08:29

    This is actually a pretty easy rule once you know that FxCop's "largest" analysis target is a module, not an assembly. In most cases, there is one module per assembly, so this won't pose a problem. However, if you are getting duplicate problem notifications per assembly because you do have multiple modules per assembly, you can add a check to prevent generating more than one problem per assembly.

    At any rate, here's the basic implementation of the rule:

    private TypeNode AssemblyCompanyAttributeType { get; set; }
    
    public override void BeforeAnalysis()
    {
        base.BeforeAnalysis();
    
        this.AssemblyCompanyAttributeType = FrameworkAssemblies.Mscorlib.GetType(
                                                Identifier.For("System.Reflection"),
                                                Identifier.For("AssemblyCompanyAttribute"));
    }
    
    public override ProblemCollection Check(ModuleNode module)
    {
        AttributeNode assemblyCompanyAttribute = module.ContainingAssembly.GetAttribute(this.AssemblyCompanyAttributeType);
        if (assemblyCompanyAttribute == null)
        {
            this.Problems.Add(new Problem(this.GetNamedResolution("NoCompanyAttribute"), module));
        }
        else
        {
            string companyName = (string)((Literal)assemblyCompanyAttribute.GetPositionalArgument(0)).Value;
            if (!string.Equals(companyName, "FooBar Inc.", StringComparison.Ordinal))
            {
                this.Problems.Add(new Problem(this.GetNamedResolution("WrongCompanyName", companyName), module));
            }
        }
    
        return this.Problems;
    }
    
    0 讨论(0)
提交回复
热议问题