如果 IDisposable 未正确处理,Resharper 是否可以设置为发出警告?
-
01-07-2019 - |
题
Resharper 4(甚至 Visual Studio 本身...)中是否有一个设置,如果我忘记将代码包装在 using
阻止,或在 a 中省略正确的 Dispose 调用 finally
堵塞?
解决方案
正确的自动Dispose分析需要全局的DFA(数据流分析)。您不太可能创建 IDisposable 对象并且不调用它的任何方法并且不将其作为参数传递。如果将一次性对象传递给其他方法(包括在隐式传递“this”时调用其成员),则该工具应分析是否未在其中调用 Dispose,或者该对象是否未存储在某处以供以后处理。
也就是说,检查一次性对象是否实际上是通过“使用”构造或以任何其他方式处置的天真实现会产生太多误报,并使分析变得无用。
其他提示
不满意当前的方法,我创建了自己的: 眼睛一次性. 。它是一个 IL 仪器,因此它应该捕获静态分析未捕获的许多泄漏。目前还处于早期阶段,欢迎大家踊跃留言。
您可以为 R# 设计一个小型插件,您可以在代码编辑器中运行该插件,以扫描代码并更新代码分析,以反映您是一个缺少刚刚描述的结构的对象。
如果您决定走这条路,我会研究 R# 插件架构。
看 这篇博文 一些测试技巧 Dispose()
在 DEBUG
. 。基本上,编写一个仅调试的析构函数来断言您已被处置。
您可能需要查看 FXCop 来了解以下内容: http://msdn.microsoft.com/en-us/library/ms182328(VS.80).aspx
遗憾的是 R# 无法处理它,即使只是对类中的字段和/或您创建的变量发出警告。
不隶属于 StackOverflow