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