问题标签 [ca2000]

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 回答
2349 浏览

c# - CA2000 将对象引用传递给 C# 中的基本构造函数

当我通过 Visual Studio 的代码分析实用程序运行一些代码时收到警告,我不确定如何解决。也许这里有人遇到过类似的问题,解决了它,并愿意分享他们的见解。

我正在编写 DataGridView 控件中使用的自定义绘制单元格。代码类似于:

它会生成以下警告:

CA2000:Microsoft.Reliability:在对对象“new DataGridViewMyCustomCell()”的所有引用超出范围之前,在方法“DataGridViewMyCustomColumn.DataGridViewMyCustomColumn()”中调用 System.IDisposable.Dispose。

我知道它警告我 DataGridViewMyCustomCell(或它继承自的类)实现了 IDisposable 接口,并且应调用 Dispose() 方法来清理 DataGridViewMyCustomCell 不再声明的任何资源。

我在互联网上看到的示例建议使用 using 块来确定对象的生命周期并让系统自动处理它,但是当移入构造函数的主体时无法识别 base,因此我无法编写 using阻止它......我不确定我是否想要这样做,因为这不会指示运行时释放以后仍可以在基类中使用的对象吗?

那么我的问题是,代码可以吗?或者,如何重构它来解决警告?我不想压制警告,除非它确实适合这样做。

0 投票
7 回答
9757 浏览

c# - C# CA2000:使用 FileStream/XmlTextReader 在失去范围之前处理对象

我有很多这样的代码:

这给了我以下代码分析警告:

如果我遵循建议并将 File.Open 放在 using 语句中,我会得到:

我正在使用 VS2010,我不禁认为我做错了什么,但我没有看到。我究竟做错了什么?

0 投票
3 回答
9584 浏览

c# - 使用全局缓存时如何修复 CA2000 IDisposable C# 编译器警告

CA2000 是关于 IDisposable 接口的警告:

CA2000:Microsoft.Reliability:在方法“ImportProcessor.GetContext(string)”中,在对对象“c”的所有引用超出范围之前调用 System.IDisposable.Dispose。

我的方法用于存储上下文缓存,如下所示:

您将在哪里使用using()修复此编译器警告的语句?

我的外部类实际上会contextCache在它自己的实现中迭代和处理内容。我应该压制它,还是有办法正确摆脱这个警告?

0 投票
1 回答
3753 浏览

c# - CA2000:对象未沿所有异常路径处理

尽管之前已在此处讨论过主题,但建议的解决方案似乎不起作用..

我的表单应用程序中有一个按钮单击回调方法,它显示了一个文件夹选择器对话框:

这会产生一个警告:

CA2000: Microsoft.Reliability : In method 'MainWindow.ButtonSelectReporterFolderClick(object, EventArgs)', object '<>g__initLocal' is not disposed along all exception paths. Call System.IDisposable.Dispose on object '<>g__initLocal' before all references to it are out of scope.

我还尝试使用try-finally块甚至调用 dialog.Dispose 没有任何块,一切都无济于事 - 警告仍然存在,始终在初始化行。

0 投票
4 回答
4217 浏览

c# - 禁用/修复 .Designer.cs 文件中的代码分析警告

我正在DataVisualization.Charting.Chart广泛使用,并且在大多数情况下它正在工作。但是,我一直在频繁地运行代码分析,并且已经处理了我自己的所有警告。但是,在使用图表的 *.Designer.cs 文件中大约有 30 个 CA2000(对象未沿所有异常路径放置)。Designer 文件生成了几乎所有的图表代码,并且几乎所有的图表元素都实现了IDisposable. 我在项目首选项中选中了“抑制生成代码的结果”,但它仍然可以。

有什么方法可以解决这个问题,而无需手动创建图表对象,也无需禁用该类中其余代码的代码分析?有没有办法为所有 .Designer.cs 文件禁用它?或者,是否有解决方案通过让设计器代码负责处理来正确删除这些警告?

0 投票
3 回答
2173 浏览

c# - 为什么我无法摆脱 CA2000 警告?

我正在编写一种重置日志系统的方法。我需要获取 CsvFileLogWriter (自定义类)的实例并将其传递给 reset 方法。CsvFileLogWriter 是一次性的,所以我收到一个 CA2000 警告告诉我:

我已按照与 CA2000 相关的说明进行操作,最终得到以下方法。但是,我仍然收到 CA2000 警告。

有人可以发现我的错误吗?

编辑

我不希望处理tempWriter引用的 writer - 这不是临时对象,只是临时引用。我只在 try 块中出现故障时才处理它(因此tempWriter永远不会设置为 null 并且 finally 块中的 if 语句会清除资源。)除非发生此故障,否则我不希望tempWriter处理 -在由ResetWriter(tempWriter)在属性中设置后,对象本身必须保持使用状态。这是根据 CA2000 规则 - 请参阅http://msdn.microsoft.com/en-us/library/ms182289.aspx?queryresult=true

为了澄清起见,这是ResetWriter所做的 - Writer是一个静态属性。该方法处理旧写入器并设置新写入器。

编辑

我认为正如SLaks所说,这是一个误报。如果我获取 ResetWriter 的内容并将它们代替对 ResetWriter 的调用(本质上是反转提取方法重构),CA2000 就会消失。

或者换句话说,以下内容不会发出 CA2000 警告:

0 投票
3 回答
4187 浏览

.net - 如何在没有代码分析警告的情况下一起使用 StringWriter 和 HtmlWriter

我正在使用 .net 并且需要获取一些 html 文本,所以我想我会一起使用 HtmlTextWriter 和 StringWriter 来获得格式正确的 html。但是,尽管我编写代码的方式各不相同,但我仍然会收到来自静态代码分析器的警告(使用 Microsoft All Rules)。在下面的代码示例中,我在注释中显示了代码分析器警告。为了简化代码,我实际上并没有对 HtmlTextWriter 进行任何调用(您会在每个函数中看到对此效果的注释)。如何正确编写代码以避免警告?

0 投票
1 回答
190 浏览

ndepend - “在失去范围之前处理对象”的 NDepend 规则

我正在评估 NDepend 作为加强代码质量和正确使用框架的努力的一部分,并且我正在寻找一种方法来编写相当于CA2000: Dispose objects before lost scope的方法。其他任何人都尝试过这样做,或者知道如何做到这一点?

0 投票
1 回答
1205 浏览

c# - C#代码分析CA2000

我有一个功能,我认为我已经修复了代码分析中的 CA2000 警告,但它不会消失。警告在 SqlCommand 上。这是功能:

我有另一个功能,在我看来没有什么不同,但没有与之关联的 CA2000 警告。这是那个功能:

我不明白这里发生了什么以及我需要做些什么来修复它。

0 投票
4 回答
5936 浏览

c# - 正确的处置方式:对象未沿所有异常路径处置

我收到第 84 行和第 85 行的消息(这两个,使用行堆叠):

CA2000:Microsoft.Reliability:在方法“RavenDataAccess.GetRavenDatabase()”中,对象“<> g_initLocal9”并未沿所有异常路径进行处理。在对对象“<>g _initLocal9”的所有引用超出范围之前调用 System.IDisposable.Dispose。

DocumentStore 实现 IDisposable。

为什么?我还能如何处理 DocumentStore 对象?它们是在 using 块中创建的,我将它们放在我的 catch 块中。这应该如何解决?