37 Stimmen

Kann ReSharper so eingestellt werden, dass eine Warnung ausgegeben wird, wenn IDisposable nicht korrekt behandelt wird?

Gibt es eine Einstellung in ReSharper 4 (oder auch in Visual Studio selbst...), die eine Warnung erzwingt, wenn ich vergesse, Code in einem using-Block zu umschließen oder den richtigen Dispose-Aufruf in einem finally-Block auslasse?

30voto

Ilya Ryzhenkov Punkte 11342

Die korrekte automatische Dispose-Analyse erfordert DFA (Datenflussanalyse) in globaler Weise. Es ist unwahrscheinlich, dass Sie ein IDisposable-Objekt erstellen und keine Methode aufrufen und es nicht als Argument übergeben. Wenn ein entsorgbares Objekt an andere Methoden übergeben wird (einschließlich des Aufrufs seiner Member, wenn "this" implizit übergeben wird), sollte das Tool analysieren, ob Dispose nicht aufgerufen wird oder ob das Objekt nicht irgendwo zur späteren Entsorgung gespeichert wird.

Das gesagt, eine naive Implementierung der Überprüfung, ob ein entsorgbares Objekt tatsächlich mit einer "using"-Konstruktion oder auf andere Weise entsorgt wird, würde zu viele falsch positive Ergebnisse liefern und die Analyse nutzlos machen.

0 Stimmen

Nicht sicher, warum du abgestimmt wurdest, Ilya, es macht Sinn, dass jemand, der sich mit R# auskennt und weiß, wie es funktioniert, zu einer Frage zu R# kommentiert.

0 Stimmen

Ich weiß nicht, ich wurde auch bei einer anderen mit ReSharper zusammenhängenden Frage abgewählt. Sieht so aus, als mochte mich jemand persönlich nicht. Oder hasse ReSharper :)

6 Stimmen

Nun, ich liebe es auf jeden Fall, und es ist großartig, Leute, die in Bezug auf das Produkt stehen, auf StackOverflow posten zu haben. Prost!

6voto

kizzx2 Punkte 18127

Mit den aktuellen Methoden unzufrieden, habe ich meine eigene Methode entwickelt: EyeDisposable. Es handelt sich um einen IL-Instrumentierung, der viele Lecks aufdecken sollte, die nicht durch statische Analyse erfasst wurden. Es befindet sich noch in einem frühen Stadium, Inputs sind willkommen.

4voto

Jay Bazuzi Punkte 43111

Siehe diesen Blog-Beitrag für einige Tricks zum Testen von Dispose() in DEBUG. Im Grunde genommen schreiben Sie einen nur für DEBUG bestimmten Destruktor, der überprüft, ob Sie entsorgt wurden.

2voto

user15749 Punkte 221

Sie könnten ein kleines Add-In für R# entwerfen, das Sie im Code-Editor ausführen könnten, um den Code zu scannen und die Codeanalyse entsprechend zu aktualisieren, dass Sie ein Objekt haben, das die von Ihnen gerade beschriebene Struktur fehlt.

Wenn Sie sich für diesen Weg entscheiden, sollten Sie sich die R#-Plugin-Architektur genauer ansehen.

2voto

user154380 Punkte 31

Sie sollten sich vielleicht FXCop dafür ansehen: http://msdn.microsoft.com/en-us/library/ms182328(VS.80).aspx

Es ist schade, dass R# das nicht behandelt, selbst wenn es nur eine Warnung für Felder in Ihrer Klasse und/oder Variablen, die Sie erstellen, ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X