问题标签 [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 投票
1 回答
141 浏览

c# - 尽管使用了 using 语句,异常过滤器仍会导致 CA2000

以下代码是我们生产代码的一部分的简化摘录。它计算文件的 SHA256 哈希值并将其作为字符串返回,或者null在文件无法访问时返回:

我们的一位开发人员最近使用异常过滤器重构了代码以减少重复catch块,所以它现在看起来像这样:

然而,我们现在得到一个代码分析警告:

CA2000 - 在方法“CalculateHash(string)”中,在对对象“sha256”的所有引用超出范围之前调用 System.IDisposable.Dispose。

据我所知,SHA256CryptoServiceProvider这里的处理是正确的,无论异常是否被过滤器捕获,都会发生这种情况。

这个 CA2000 是误报,还是异常过滤器创建了一个不会发生处置的场景?

0 投票
1 回答
172 浏览

c# - 类级别对象上的 CA2000 警告

我有一个在类级别声明的对象,它发出 CA2000 警告。如何从下面的代码中消除 CA2000 警告?

警告是 - 警告 CA2000 在方法“SIMPathFinder.SIMPathFinder()”中,对象“new OpenFileDialog()”未沿所有异常路径处理。在对对象“new OpenFileDialog()”的所有引用超出范围之前调用 System.IDisposable.Dispose。

0 投票
1 回答
139 浏览

.net - 退回一次性物品并收到 CA2000 警告

我正在尝试将 XMLNodeReader 返回到另一个函数但收到 CA2000 警告

如果我使用以下代码,它会正常工作吗?警告被抑制,但不确定它是否会影响逻辑。

0 投票
0 回答
80 浏览

c# - 警告:CA2000:Microsoft.Reliability 调用 System.IDisposable.Dispose 尽管使用

在以下方法中,我收到警告:

警告:CA2000:Microsoft.Reliability:在方法“AvdfileCache.AddPartTableGaugeData(long, long)”中,在对对象“cmdGaugeData”的所有引用超出范围之前调用 System.IDisposable.Dispose。

我认为由于 using-Statement 可以保证cmdGaugeData在所有情况下都可以处理,那么为什么我仍然会收到此警告?

编辑:现在我认为这是分析器中的一个错误。我不得不承认,上面的代码是我真实代码的剥离变体(实际上我的真实代码中有更多参数),并且在试图找出警告何时出现时,我得出以下结论:

此代码再次带来警告,但是:

  • 没有警告,当我删除ToString-Calls 时(只是SVal_xx作为参数传入)
  • 没有警告,当我使用 29 时间时ToString,第 30 个参数ToString会生成警告

那么有什么进一步的提示吗?

0 投票
1 回答
166 浏览

singleton - 当对象放置在依赖注入容器中时,您如何处理 CA2000(IDisposable 对象的处置)?

根据 Microsoft 的说法,HttpClient 的最佳实践是维护 HttpClient 的单例版本(释义,但这是结果。不要立即处理它)。我自己的测试表明,与为每条消息重新创建 HttpClient 相比,在执行大量 Http 操作时,单个实例具有明显的优势。因此,自然地,将 HttpClient 放在 DI 容器中是有意义的。

问题是我收到来自 StyleCop 的警告:CA2000: Dispose objects before lost scope。 显然我可以压制,但这让我很困扰,因为还有其他 IDisposable 对象可能想要放入 DI 容器中。使用 DI 模式时,此警告是否有效?处理它有什么技巧吗?