Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果IDisposable未正确处理,是否可以将Resharper设置为警告?_C#_.net_Resharper_Static Analysis - Fatal编程技术网

C# 如果IDisposable未正确处理,是否可以将Resharper设置为警告?

C# 如果IDisposable未正确处理,是否可以将Resharper设置为警告?,c#,.net,resharper,static-analysis,C#,.net,Resharper,Static Analysis,Resharper 4(甚至Visual Studio本身…)中是否有一个设置,如果我忘记使用块在中包装代码,或在最终块中ommit正确的Dispose调用,则会强制发出警告?正确的自动Dispose分析需要全局DFA(数据流分析)。您不太可能创建IDisposable对象,并且不对其调用任何方法,也不将其作为参数传递。如果一次性对象被传递给其他方法(包括在隐式传递“this”时调用其成员),那么工具应该分析Dispose是否未在中调用,或者该对象是否未存储在某个位置以供以后处理 也就是说,天真

Resharper 4(甚至Visual Studio本身…)中是否有一个设置,如果我忘记使用块在
中包装代码,或在
最终
块中ommit正确的Dispose调用,则会强制发出警告?

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


也就是说,天真的实现检查一次性对象是否确实使用了“使用”构造或以任何其他方式处理,会产生太多的误报,并使分析无效。

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


如果您决定采用R#插件体系结构,我会研究它。

请参阅
调试中的
Dispose()
测试技巧。基本上,编写一个仅调试的析构函数,声明您已被释放。

您可能需要查看FXCop以了解以下内容:


遗憾的是,R#无法处理它,即使只是对类中的字段和/或创建的变量发出警告。

对当前方法不满,我创建了自己的:。它是一个IL仪器,所以它应该能够捕捉到许多静态分析无法捕捉到的泄漏。它仍处于早期阶段,欢迎输入。

不确定你为什么会投票否决Ilya,对于一个熟悉R#的人来说是有意义的,而且它对一个关于R#的问题进行评论的方式是有意义的。我不知道,我还投票否决了另一个与ReSharper相关的问题。就我个人而言,似乎有人不喜欢我。或者讨厌ReSharper:)我喜欢它,能有人在StackOverflow上发布与该产品相关的信息真是太好了。干杯当然,只有当变量的作用域是单个方法时,它才能发出警告,而不必检查它是否在其他地方被释放。Ilya,我理解你的论点。但是,通过识别特定的、常用的方法,您似乎可以获得很多“实惠”,这些方法可以生成
IDisposable
s,而这些方法本身并不在自己的方法中进行处理。未能处理HttpResponseMessage可能会导致代码的其他部分出现神秘的超时,并且在没有使用
using
语句的情况下故意使用
wait sendsync()
。在这些罕见的情况下,人们可以使用Resharper的评论等来表示他们知道自己在做什么。