我刚刚就Service References
和Xml summary errors
的自动生成代码问过类似的question。发布了一个答案,建议我可以将Service Reference
添加到自己的项目中,然后它可以完全避免Xml
摘要警告和Stylecop
错误。
但我意识到我可以通过将Xml
设置为Service Reference
来解决Internal
问题,现在我遇到了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$
有谁知道如何抑制Stylecop
文件的所有Reference.cs
错误?
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警察设置在构建时运行。我在构建选项卡和
中的条件编译符号中添加了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
。
答案 0 :(得分:5)
CAxxxx错误来自FxCop,而不是StyleCop。如果它们出现在生成的代码中,并且您希望保留生成的代码而不更改生成器,则只需添加项目级排除项(例如:在GlobalSuppressions.cs中)。
以下问题编辑#3:
由于您“手动”运行fxcopcmd.exe,因此根本不使用忽略生成代码的C#项目设置。您需要将/ignoregeneratedcode
开关添加到fxcopcmd.exe命令行才能应用此命令。