【问题标题】:How to suppress stylecop/fxcop/visual studio code analysis for auto generated file?如何抑制自动生成文件的 stylecop/fxcop/visual studio 代码分析?
【发布时间】:2012-03-19 03:07:44
【问题描述】:

我有从 ANTLR 生成的 C# 代码。如何告诉 stylecop/fxcop/visual studio 代码分析在检查时忽略此文件?

【问题讨论】:

    标签: visual-studio-2010 antlr stylecop


    【解决方案1】:

    对于 FxCop,确定的方法是使用 [GeneratedCode] 属性装饰您的代码并禁用检查生成代码的选项。 VS 和/或 FxCop 版本之间的细节有所不同;请参阅此博客文章以获取 correct usage of the attributes

    StyleCop 会忽略该属性,但您还有其他一些选择:

    • 将您的文件命名为“Whatever.Designer.cs”并在您的 StyleCop.settings 文件中设置该选项。
    • 在文件中包含一个 XML 标头,其中包含 <auto-generated />

    此外,这两种工具的最新版本似乎都忽略了名称中包含短语“生成的代码”的区域内的代码。例如,在您的 Windows 窗体 *.Designer.cs 文件中,您将看到:

    #region Windows Form Designer generated code
    
    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent ( )
    {
        // stuff here
    }
    
    #endregion
    

    代码分析和 StyleCop 都会忽略该区域内的代码,但仍会针对该文件的其余部分运行。 (如果您设置了“忽略设计器文件”选项,StyleCop 将忽略整个文件,因为它以 .Designer.cs 结尾。)

    这两个工具似乎无法就如何忽略代码达成一致,这非常令人沮丧(几乎就像自动生成的代码数量一样令人沮丧,而这些代码却无法正确排除自身 - 看看你,EF。 ) 问题在于,代码分析会检查您的编译代码(具有属性元数据但没有 cmets),而 StyleCop 会检查您的源代码(其中元数据属性的范围更难跟踪,但仍有可能)。

    在我的模板中,我倾向于使用多种选项:我在其中包含一个带有 &lt;auto-generated&gt; 标记的 StyleCop 感知标头,然后用 [GeneratedCode] 装饰每个代码元素,它似乎可以捕获所有内容。 (可能不言而喻,我的自动生成的代码也非常努力地不首先违反规则:))

    【讨论】:

      【解决方案2】:

      另一种方法可能是使用@headers。

      @lexer::header {
          #pragma warning disable 1591
      }
      
      @parser::header {
          #pragma warning disable 1591 
      }
      

      【讨论】:

        【解决方案3】:

        好吧,我注意到 ANTLR 生成的文件是“部分”的,所以我刚刚创建了第二个文件,添加了与“部分”相同的类,但该类没有任何字段或方法,但将以下属性添加到类:

        [GeneratedCodeAttribute("ANTLR", "3.0.0.0")]

        然后我将此文件签入到 TFS 源代码管理中。像这样,类具有生成的代码属性集,CodeAnalysis/FxCop 将忽略整个类。但是您必须配置 CodeAnalysis,以不检查自动生成的代码(适当的复选框设置为选中)。

        【讨论】:

          猜你喜欢
          • 2010-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-09
          • 1970-01-01
          • 2010-12-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多