36

Resharper 4 (または Visual Studio 自体でも...) に、コードをusingブロックでラップするのを忘れた場合、またはブロックで適切な Dispose 呼び出しを省略した場合に警告を強制する設定はありfinallyますか?

4

5 に答える 5

29

正しい自動 Dispose 分析には、グローバルな方法での DFA (データ フロー分析) が必要です。IDisposable オブジェクトを作成し、メソッドを呼び出したり、引数として渡したりすることはほとんどありません。使い捨てオブジェクトが他のメソッドに渡された場合 ("this" が暗黙的に渡された場合のメンバーの呼び出しを含む)、ツールは Dispose が内部で呼び出されていないかどうか、またはそのオブジェクトが後で処分するためにどこかに保存されていないかどうかを分析する必要があります。

そうは言っても、使い捨てオブジェクトが実際に「使用」構造またはその他の方法で破棄されているかどうかをチェックする単純な実装は、あまりにも多くの誤検知をもたらし、分析を役に立たなくします。

于 2008-09-19T13:27:00.500 に答える
6

現在の方法に不満があるため、独自のEyeDisposableを作成しました。これは IL インスツルメンターであるため、静的分析ではキャッチされない多くのリークをキャッチする必要があります。まだ初期段階ですが、ご意見をお待ちしております。

于 2011-05-22T12:40:50.563 に答える
3

inをテストするためのいくつかのトリックについては、このブログ投稿を参照してください。基本的に、破棄されたことをアサートする DEBUG 専用のデストラクタを作成します。Dispose()DEBUG

于 2008-09-19T15:03:10.393 に答える
2

これについては FXCop を参照してください: http://msdn.microsoft.com/en-us/library/ms182328(VS.80).aspx

残念なことに、作成したクラスや変数のフィールドに対する警告だけであっても、R# はそれを処理しません。

于 2009-09-22T10:37:52.353 に答える
2

R# への小さなアドインを設計し、コード エディター内で実行して、コードをスキャンし、コード分析を更新して、説明した構造が欠落しているオブジェクトであることを反映させることができます。

あなたがそのルートに行くことにした場合は、R# プラグイン アーキテクチャを調べます。

于 2008-09-19T14:44:24.667 に答える