Frage

Gibt es eine Einstellung in ReSharper 4 (oder auch Visual Studio selbst ...), die eine Warnung zwingt, wenn ich vergesse Code in einem using Block zu wickeln, oder ommit die ordnungsgemäße Entsorgung Aufruf in einem finally Block?

War es hilfreich?

Lösung

Die korrekte automatische Entsorgen Analyse erfordert DFA (Data Flow Analysis) in einer globalen Art und Weise. Es ist unwahrscheinlich, dass Sie eine IDisposable-Objekt erstellen und keine Methode auf sie nicht nennen und es nicht als Argument übergeben um. Wenn Einweg-Objekt zu anderen Methoden übergeben wird (einschließlich ihren Mitglieder fordern, wenn „die“ implizit übergeben wird), sollte das Werkzeug analysieren, ob Entsorgen nicht innerhalb, oder das Objekt aufgerufen wird, ist nicht irgendwo zur späteren Entsorgung gelagert.

Das heißt, naive Umsetzung des Prüfens, ob wegwerfbar Objekt in der Tat ist so angeordnet, mit „using“ konstruieren oder in irgendeiner anderen Weise zu viel falsche Positive ergäbe, und rendern Analyse unbrauchbar.

Andere Tipps

Die Unzufriedenheit mit den aktuellen Methoden, habe ich meine eigene: EyeDisposable . Es ist ein IL instrumenter so sollte es viele Lecks fangen nicht durch statische Analyse gefangen. Es ist immer noch in einem frühen Stadium, inpuits sind willkommen.

könnten Sie entwerfen ein kleines Add-in R #, die Sie in den Code-Editor ausgeführt haben könnte, die den Code scannt und aktualisiert die Code-Analyse zu berücksichtigen, dass Sie ein Objekt, der die Struktur fehlt Ihnen gerade beschrieben habe.

ich in die R # Plugin-Architektur aussehen würde, wenn Sie sich entscheiden, diesen Weg zu gehen.

Siehe diesem Blog-Eintrag für einige Tricks zum testen auf Dispose() in DEBUG. Im Grunde genommen, schreiben Sie einen DEBUG-only destructor, die behaupten, dass Sie entsorgt wurden.

Sie könnten FXCop für diese aussehen soll: http://msdn.microsoft.com/en-us/library/ms182328(VS.80).aspx

Es ist schade, R # ist es nicht handhaben, auch wenn nur eine Warnung für die Felder in der Klasse und / oder Variablen, die Sie erstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top