これはFxCopのは、.NET Frameworkのデザインの選択と対立し、強くある場合である
以下のサンプルでは、という名前のフォルダを前提としています。この問題は、ストリームの所有権を前提としたStreamWriterによって引き起こされます。一般に、「成功のピットに落ちる」設計選択では、ほとんどのプログラマはStreamWriterを閉じることでストリームを処理するのに十分であると想定します。特に、Dispose()の代わりにClose()を使用するとそうです。
大部分のケースでうまく機能します。ほとんどの場合、具体的な用途はです。はCryptoStreamです。 CryptoStreamがフラッシュされて破棄される前に、下にあるストリームが閉じられているときに、フラッシングが必要であり、診断不能に誤動作するクラス。 )具体的な問題を容易に認識するにはあまりにも秘密であるにもかかわらず、FxCopの警告が適切な場合)
そして、プログラマが独自のDispose()メソッドを書いて、一回以上呼ばれる。 FxCopの警告が注目されたものですが、実際にはDisposeメソッドが安全であることを知るには十分スマートではありません。
この特定のケースでは、FxCop警告は役に立たないだけです。すべての.NET FrameworkのDispose()メソッドの実装は安全です。 FxCopは.NETフレームワークコードに対してこの種の警告を自動的に抑制します。しかし、マイクロソフトもそれを使用していません。 [SuppressMessage]属性のロットが.NETフレームワークのソースコードにあります。
警告を回避することはあまりにも醜いですし、エラーが発生しやすいです。何も実際に間違っているので、無意味です。 FxCopは "thisと考えていますか?"というメッセージを生成するように設計された単なる診断ツールであることに注意してください。ルールを無視すると、あなたを刑務所に入れる警察官ではありません。それはコンパイラの仕事です。
警告をオフにするには、[SuppressMessage]属性を使用します。
Microsoftによれば、同じオブジェクトに対してDispose()を複数回呼び出すことができるはずです。 –
@MatthewWatson、その上でマイクロソフトを引用している参考文献はすばらしい –
@MatthewWatson 1回目を使用して既に存在しているオブジェクトを破棄しようとすると、エラーが発生する – CloudyMarble