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