IDisposable が正しく処理されない場合に警告するように Resharper を設定できますか?
-
01-07-2019 - |
質問
Resharper 4 (または Visual Studio 自体) に、コードをラップするのを忘れた場合に警告を強制する設定はありますか? using
ブロックするか、適切な Dispose 呼び出しを省略します。 finally
ブロック?
解決
正しい自動破棄分析には、グローバルな方法で DFA (データ フロー分析) が必要です。IDisposable オブジェクトを作成し、そのオブジェクトに対してメソッドを呼び出したり、引数として渡したりすることはほとんどありません。使い捨て可能なオブジェクトが他のメソッドに渡される場合 (「this」が暗黙的に渡されるときのメンバーの呼び出しを含む)、ツールはその中で Dispose が呼び出されていないか、またはそのオブジェクトが後で破棄するためにどこかに保存されていないかを分析する必要があります。
とはいえ、使い捨てオブジェクトが実際に「using」構造またはその他の方法で破棄されているかどうかをチェックする単純な実装では、誤検知が多すぎて分析が役に立たなくなります。
他のヒント
現在の方法に不満を感じたので、独自の方法を作成しました。 目使い捨て. 。これは IL インストルメンタであるため、静的分析では検出できない多くのリークを検出する必要があります。まだ初期段階にあるので、意見は大歓迎です。
R# への小さなアドインを設計して、コード エディター内で実行して、コードをスキャンし、今説明した構造が欠落しているオブジェクトを反映するコード分析を更新することができます。
その道を選択する場合は、R# プラグイン アーキテクチャを検討してみます。
見る このブログ投稿 テストのためのいくつかのトリックについては、 Dispose()
で DEBUG
. 。基本的に、破棄されたことを表明する DEBUG 専用のデストラクターを作成します。
これについては FXCop を参照してください。 http://msdn.microsoft.com/en-us/library/ms182328(VS.80).aspx
たとえクラス内のフィールドや作成した変数に対する警告であっても、R# はそれを処理しないのが残念です。