可以将Resharper设置为在IDisposable未正确处理时发出警告吗?

时间:2008-09-19 13:04:09

标签: c# .net resharper static-analysis

如果我忘记将代码包装在using块中,或者在{{1}中省略正确的Dispose调用,Resharper 4(甚至Visual Studio本身......)中是否有设置会强制发出警告阻止?

5 个答案:

答案 0 :(得分:28)

正确的自动Dispose分析需要以全局方式进行DFA(数据流分析)。您不可能创建一个IDisposable对象,也不会在其上调用任何方法,也不会将其作为参数传递。如果将一次性对象传递给其他方法(包括调用其成员,当隐式传递“this”时),该工具应分析是否未调用Dispose,或者该对象未存储在某处以供以后处理。

也就是说,检查一次性物体是否实际上处置“使用”构造或以任何其他方式进行的天真实施会产生太多的误报,并使分析变得毫无用处。

答案 1 :(得分:6)

对当前方法的不满,我创建了自己的方法:EyeDisposable。它是一个IL指导者,因此它应该捕获许多未被静态分析捕获的泄漏。它还处于早期阶段,欢迎使用。

答案 2 :(得分:2)

您可以设计一个R#的小插件,您可以在代码编辑器中运行,该代码编辑器扫描代码并更新代码分析,以反映您丢失了刚刚描述的结构的对象。

如果您决定走这条路,我会研究R#插件架构。

答案 3 :(得分:2)

有关在Dispose()中测试DEBUG的一些技巧,请参阅this blog post。基本上,编写一个仅限DEBUG的析构函数来断言你已被处置。

答案 4 :(得分:2)

您可能需要查看FXCop:http://msdn.microsoft.com/en-us/library/ms182328(VS.80).aspx

遗憾的是R#没有处理它,即使只是警告你的类中的字段和/或你创建的变量。