【问题标题】:Stylecop Suppress errors for Reference.cs fileStylecop 抑制 Reference.cs 文件的错误
【发布时间】:2023-04-10 16:25:01
【问题描述】:

我刚刚询问了一个类似的question 关于来自Service ReferencesXml summary errors 的自动生成代码。发布了一个答案,建议我可以将Service Reference 添加到它自己的项目中,然后它可以完全避免Xml 摘要警告和Stylecop 错误。

但我意识到我可以通过将Service Reference 设置为Internal 来解决Xml 问题,现在我陷入了StyleCop 错误。

我使用的是FxCop 10.0 版。

在我的项目的属性中,在代码分析选项卡中,我已经检查了

的选项

抑制生成代码的结果 (仅限托管)

另外,通过查看 Reference.cs 文件中生成的代码,我看到代码被以下属性修饰:

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "4.0.0.0")]

..然后应该跳过哪个Stylecop,对吗?虽然这不起作用,但生成的代码仍然出现StyleCop 错误。

编辑:在生成的代码中也可以找到以下标头:

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:4.0.30319.18033
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

那为什么不被忽略呢?

我还发现了这个question 并尝试在我的StyleCop 设置中使用以下内容:

<CollectionProperty Name="GeneratedFileFilters">
    <Value>Reference\.cs$</Value>
 </CollectionProperty>

但这也不起作用,我一直在努力使用正则表达式,但尝试将以下值添加到上面的示例中以让 Stylecop 忽略我生成的代码。

Reference.cs
\Reference\.cs
\Reference\.cs$
Reference\.cs$

有谁知道如何抑制 Reference.cs 文件的所有 Stylecop 错误?

Edit2:Reference.cs 文件显示的错误:

错误 1 ​​CA1812 : Microsoft.Performance : ... 是一个内部类 显然从未实例化。如果是这样,请从 部件。如果这个类只包含静态方法, 考虑添加一个私有构造函数以防止编译器 生成默认构造函数。

错误 2 CA2239:Microsoft.Usage:添加“私人无效” OnDeserialized(StreamingContext)' 方法来键入...并为其赋予属性 使用 System.Runtime.Serialization.OnDeserializedAttribute。

错误 4 CA1811 : Microsoft.Performance : ... 似乎没有 上游公共或受保护的调用者。

我有这 3 种错误中的 27 种。

编辑 3: 我有 Style/Fx cop 设置以在构建时运行。我在构建选项卡的条件编译符号中添加了CODE_ANALYSIS

"$(ProgramFiles)\Microsoft FxCop 10.0\FxCopCmd.exe" /file:"$(TargetPath)" /ruleid:-"Microsoft.Design#CA1006" /ruleid:-"Microsoft.Design#CA1020" /console /cul:en-GB /q /assemblyCompareMode:StrongNameIgnoringVersion

...在Post-build event command line 中的Build Events 选项卡中。

【问题讨论】:

  • 你能详细说明你看到了什么错误吗?
  • @Mightmuke,见编辑 2
  • 当我选择 Suppress results from generated code 选项时,它对我来说似乎工作正常(虽然我没有括号中的文本,但我想知道它是如何以及为什么存在的)。您是从 IDE(又名代码分析)还是从 FxCop 运行器运行它?如果来自 IDE,您是否有多个项目?从 IDE 运行时存在一个问题,即第一个项目的代码分析设置会覆盖“子”项目的设置(至少在 VS2010 中)。如果您只有一个项目,这当然不会成为问题。

标签: fxcop stylecop suppress-warnings service-reference


【解决方案1】:

CAxxxx 错误来自 FxCop,而不是 StyleCop。如果它们出现在生成的代码中,并且您想保留生成的代码而不更改生成器,只需添加项目级排除项(例如:在 GlobalSuppressions.cs 中)。

以下问题编辑 #3: 由于您正在“手动”运行 fxcopcmd.exe,因此根本不会使用您的 C# 项目设置来忽略生成的代码。您需要将 /ignoregeneratedcode 开关添加到您的 fxcopcmd.exe 命令行才能应用它。

【讨论】:

  • 有没有办法,用 FxCop 跳过生成的文件,而不必为每个错误写抑制?
  • 如果您已经将 FxCop 设置为忽略生成的代码,那么您已经完成了所有可以做的事情。我无法重现该问题,但我无法判断这是因为我的服务引用不同还是您的 FxCop 配置错误。当您看到 CA 警告时,您是如何运行 FxCop 的?
  • 与我所包含的示例相比,是否有其他方法可以忽略为 fxCop 生成的代码?
  • 这取决于您运行 FxCop 的方式。如果您要回答如何运行它的问题,那将大大表明在 VStudio 中设置该选项是否足够。