问题标签 [fxcop]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
7043 浏览

c# - 如何正确使用 close 方法实现 dispose 模式(CA1063)

框架设计指南(第 2 版,第 327 页)说:

考虑提供方法Close(),除了Dispose(), if close 是该地区的标准术语。

这样做时,重要的是使 Close 实现与明确地Dispose考虑实现方法相同。IDisposable.Dispose

因此,按照提供的示例,我有这个类:

FxCop 似乎不喜欢这样:

CA1816:Microsoft.Usage:“SomeClass.Close()”调用“GC.SuppressFinalize(object)”,该方法通常仅在“IDisposable.Dispose”的实现中调用。有关详细信息,请参阅 IDisposable 模式。

CA1816:Microsoft.Usage:将“SomeClass.IDisposable.Dispose()”更改为调用“GC.SuppressFinalize(object)”。这将防止在对象被释放并且超出范围后不必要地完成对象。

CA1063:Microsoft.Design:修改“SomeClass.IDisposable.Dispose()”,使其调用 Dispose(true),然后在当前对象实例(Visual Basic 中的“this”或“Me”)上调用 GC.SuppressFinalize,然后返回。

CA1063:Microsoft.Design:将“SomeClass.IDisposable.Dispose()”重命名为“Dispose”,并确保将其声明为公共和密封。

  • 如何正确使用 close 方法实现 dispose 模式?

-或者-

  • 如何抑制警告?

我试过

但 FxCop 1.36 仍会报告它们。

编辑:按照建议更改它可以消除除此警告之外的所有内容:

CA1063:Microsoft.Design:将“SomeClass.IDisposable.Dispose()”重命名为“Dispose”,并确保将其声明为公共和密封。

编辑 2:确实缺少 CODE_ANALYSIS。谢谢。

0 投票
4 回答
1986 浏览

.net - 如何编写代码分析 (FxCop) 规则以防止方法调用

如何为vs2008编写代码分析工具,防止特定框架调用,如GC.WaitForFullGCComplete()或Application.DoEvents()

我尝试在我的自定义规则中覆盖 VisitMethodCall,但我无法弄清楚 Microsoft.FxCop.Sdk.MethodCall 参数中真正包含的内容。在网上找不到示例。

有人可以指出我正确的方向吗?

0 投票
3 回答
1011 浏览

vb.net - FxCop 在 VB.NET 上和在 C# 上一样有价值

我一直在查看我们的一些使用 FxCop 的 VB.NET dll,所有错误都与 DLL 设置(即强名称、文化信息)和变量方法的情况有关。

查看 FxCop 检查 C# Dll 的几个示例,它似乎提供了更多潜在错误。

这是否意味着 FxCop 在 C# 开发中比 VB.NET 更有价值,或者我刚刚选择了不好的例子。

我认为 FxCop 是在 IL 而不是特定语言上工作的情况,所以我只是缺少 VB.NET 的规则文件还是 C# 有更多可用的文件?

0 投票
4 回答
790 浏览

legacy - 您如何从遗留代码上的 FxCop 开始?

有没有人有将 FxCop 引入遗留代码的经验?如果有人引入违反规则的代码,我们希望我们的构建失败。但就目前而言,这是不可能的,因为遗留代码有超过 9000 次违规。

我所知道的抑制错误的唯一方法是通过 SuppressMessage 属性,但这仅适用于方法和 GeneratedCodeAttribute。最后一个可以用于类和命名空间(如果我没记错的话),但不应该用于非生成代码(参见此处)。

现在,我们每天都会花一些时间来消除违规行为,但会不断引入新的违规行为,因为我们的构建不会失败。

有任何想法吗?

0 投票
6 回答
1583 浏览

fxcop - 为什么 FxCop 认为将字段初始化为默认值是不好的?

为字段分配默认默认值时(此处为布尔值 false),FxCop 说:

现在,我知道代码int a = 0bool ok = false正在引入一些冗余,但对我来说,这似乎是一种非常非常好的代码实践,我的老师在我看来是正确坚持的。

不仅性能损失很小,更重要的是:依赖默认值是依赖于每个程序员曾经使用过一段代码的知识,依赖于每个带有默认值的数据类型。(约会时间?)

说真的,我觉得这很奇怪:应该保护你不犯太明显错误的程序,是建议在这里做一个,只是为了提高性能?(我们在这里谈论的是初始化代码,只执行一次!那么关心的程序员当然可以省略初始化(并且可能应该使用 C 或汇编程序:-))。

FxCop 在这里犯了一个明显的错误,还是有更多的错误?

两个更新:

  1. 这不仅仅是我的观点,而是我在大学(比利时)所教的。并不是说我喜欢使用 argumentum ad verecundiam,只是为了表明这不仅仅是我的观点。关于这一点:

  2. 抱歉,我刚找到这个:

    我应该总是/永远/从不将对象字段初始化为默认值吗?

0 投票
9 回答
13663 浏览

.net - 参数命名:文件名还是文件名?

我尝试在我的命名中语法正确*。我一直使用filename而不是fileName. java 约定似乎也使用了这个,但 FxCop 更喜欢fileName.

维基百科上有一个关于它的讨论。我读的越多,我就越觉得我是对的(这很常见!:))。有没有人有明确的答案,或者这仅仅是主观的东西?

* 我只希望这篇文章没有语法错误!

0 投票
1 回答
398 浏览

c# - FxCop 规则不与空值进行比较

我正在尝试为 fxcop 编写规则:

如果将某个类与 null 进行比较,则错误。

你认为有可能吗?

我写了一部分代码,我可以找到我正在寻找的类型但不知道如何找到值的语句。

因为知道我有那个代码,但不知道去哪里..

0 投票
4 回答
2913 浏览

.net - 命名:价目表与价目表

哪个更正确,“价格表”或“价格表”?

FxCop 说:CA1702:Microsoft.Naming:类型名称“PriceList”中的复合词“PriceList”作为一个离散术语存在。如果您打算使用单个单词,请将其大小写为“价格表”。

编辑:这是一个带有标题、开始/结束日期等的对象。

0 投票
2 回答
876 浏览

c# - 如何声明事件处理程序以传递 FxCop 规则,特别是关于包括 sender 和 e?

FxCop 抱怨我有一个事件处理程序声明。尽管多次阅读警告,但我看不出代码有什么问题。

我的用户控件中的代码

Page 中使用控件的代码

但 FxCop 说:

按照惯例,.NET 事件有两个参数来指定事件发送者和事件数据。事件处理程序签名应遵循以下形式:void MyEventHandler(object sender, EventArgs e)。'sender' 参数始终是 System.Object 类型,即使可以使用更具体的类型。“e”参数始终是 System.EventArgs 类型。不提供事件数据的事件应使用 System.EventHandler 委托类型。事件处理程序返回 void,以便它们可以将每个事件发送到多个目标方法。目标返回的任何值在第一次调用后都会丢失。

0 投票
6 回答
2916 浏览

c# - C# 代码分析不喜欢受保护的静态 s_Foo (CA1709, CA1707)

我通常在字段m_前面添加一个,在成员之前添加一个。privates_static

使用类似的代码

我通过 VS2008 的代码分析得到以下警告:

  • CA1709:Microsoft.Naming:通过将成员名称“Bar.s_Random”中的“s”更改为“S”来更正其大小写。
  • CA1707:Microsoft.Naming:从成员名称“Bar.s_Random”中删除下划线。

如何解决这个问题?我应该简单地删除s_吗?或者为此警告添加全局抑制?

编辑:我的公司缺乏编码标准,所以由我来为我的代码定义它们。(是的,我知道了...)

如果您认为s_总体上应该被删除,如果您能提供官方来源,我会很高兴。