【问题标题】:Disable StyleCop for specific lines为特定行禁用 StyleCop
【发布时间】:2010-12-17 19:34:55
【问题描述】:

我们在 C# 项目中使用 StyleCop。在某些情况下,我们希望避免这些规则。我知道您可以在文件开头添加// <auto-generated /> 以使 StyleCop 忽略它。但是,我不想忽略整个文件的规则——只有其中的一段代码。

我能否以某种方式禁用特定行的 StyleCop?

【问题讨论】:

    标签: .net stylecop


    【解决方案1】:

    您可以通过向代码块添加属性来抑制规则。这是下面链接的博客文章中的一个类的简单示例,但您可以对不同的成员单独执行此操作:

    [SuppressMessage("Microsoft.StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented")]
    public class MyUndocumentedClass
    {
        public void MyUndocumentedMethod {}
    } 
    

    在 MSDN 博客文章中有一个 quick overview,在 MSDN 上有一个 fuller description of the attributes。

    【讨论】:

    • 谢谢!这应该可行,尽管我希望有一种更简单的方法。希望有一种方法,我可以简单地说“忽略这些行的 StyleCop” - 而不是必须为样式名称等找到正确的文本。等待看看这是否可能。
    • AFAIK 这是不可能的 - 抑制消息的能力本身是一个相当新的添加。
    • 谢谢。那你可能是对的,但我会把这个问题留在那里一段时间......
    • 请注意,您需要该属性的 Justification="" 参数 - 否则您将收到 StyleCop 警告 SA1404:“代码分析抑制必须包含描述原因的非空理由压制。”
    • 要让 StyleCop 忽略“这些行”,将这些行包装在一个区域中,并让开始区域包含“生成的代码”字样(例如“这不是生成的代码,而是 StyleCop 应该忽略的代码。 "
    【解决方案2】:

    我知道的一个老问题,但在寻找答案时,我发现在 stylecop 4.4 中,您现在可以在方法中添加类似这样的内容 - 或其中一行:

    [SuppressMessage("Microsoft.StyleCop.CSharp.DocumentationRules", "*", Justification = "Risky to change manually")]
    [SuppressMessage("Microsoft.StyleCop.CSharp.SpacingRules", "*", Justification = "Risky to change manually")]
    [SuppressMessage("Microsoft.StyleCop.CSharp.MaintainabilityRules", "*", Justification = "Risky to change manually")]
    [SuppressMessage("Microsoft.StyleCop.CSharp.LayoutRules", "*", Justification = "Risky to change manually")]
    [SuppressMessage("Microsoft.StyleCop.CSharp.NamingRules", "*", Justification = "Risky to change manually")]
    [SuppressMessage("Microsoft.StyleCop.CSharp.ReadabilityRules‌​", "*", Justification = "Risky to change manually")]
    [SuppressMessage("Microsoft.StyleCop.CSharp.OrderingRules", "*", Justification = "Risky to change manually")]
    
    • 注意:我可能缺少一两个规则类别

    【讨论】:

    • 这对我有用。仅供参考,我编辑了最后两条消息,因为它们在命名空间中重复了“Microsoft.StyleCop.CSharp”
    • 我最近不得不为一个库类添加这个,发现我需要 [SuppressMessage("Microsoft.StyleCop.CSharp.ReadabilityRules", "*", Justification = "This is library code")]还有
    • 订购规则是您可能需要添加的另一个规则:[SuppressMessage("Microsoft.StyleCop.CSharp.OrderingRules", "*", Justification = "Risky to change manually")]
    【解决方案3】:

    这个guy 似乎有一个很好的一般忽略技巧;他建议把它放在文件的顶部 - 测试并使用 R#

    //------------------------------------------------------------------------------
    // <auto-generated>
    // This code was generated by a tool.
    // </auto-generated>
    //------------------------------------------------------------------------------
    

    例如,当您刚刚制作大量样板以遵守主要未实现的界面时非常方便。

    【讨论】:

    • 如果您的代码不是自动生成的,则不应添加此标头。
    【解决方案4】:

    您可以将这段代码放在区域名称 Generated Code 之间,它将被省略。

    【讨论】:

      【解决方案5】:

      使用以下 StyleCop 属性装饰您的类或方法:

      [GeneratedCode("Tool Goes Here", "Message Goes Here")]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-06
        • 2010-10-13
        • 2013-06-14
        • 2021-10-16
        • 2013-11-17
        • 1970-01-01
        • 1970-01-01
        • 2015-04-02
        相关资源
        最近更新 更多