11

さまざまな例外からいくつかのクラスを派生させました。これで、VSはこの質問のタイトルのように警告を出します。

  1. 誰かがこのルールを抑制することの意味を説明できますか?

  2. ここから、「例外クラスはアプリケーションドメイン間で正しく機能するためにシリアル化可能である必要があるため、このルールからの警告を抑制しないでください」というルールを説明してください。?

PSまあ私は自分で答えを持っています。実際、例外をシリアル化可能としてマークする必要があります。同じAppDomainにこの属性がなくても正常に機能します。ただし、他のドメインからそれをキャッチしようとすると、アプリの境界を越えるためにシリアル化する必要があります。そして、それが私がこれを見つけた主な理由です。

4

2 に答える 2

15

これは、正確にはVisual Studioの警告ではなく、FxCopツールによって生成される警告です。これは、VS分析メニューから実行できます。FxCopは、コンパイラがフラグを立てない.NETプログラムの一般的な落とし穴を探す静的アナライザです。その警告のほとんどはかなりあいまいであり、実際に深刻な問題になることはめったにありません。「これについて考えたことはありますか?」として扱う必要があります。一種のツール。

ここで思い出させようとしている小さな事実は、ExceptionクラスがISerializableを実装し、[Serializable]属性を持っていることです。これは非常に難しい要件であり、ベースのExceptionオブジェクトをアプリドメイン間でシリアル化できるようにします。ExceptionはMarshalByRefObjectから派生しないため必要です。また、別のアプリドメインで実行するコードが、キャッチできる例外をスローできるようにするために必要です。

したがって、FxCopは、独自のException派生クラスに対して同じことをしなかったことに注意します。これは、例外をスローするコードを別のアプリドメインで実行する場合にのみ問題になります。FxCopは、そうするかどうかを知るのに十分なほど賢くはありません。そうすることで、失敗したことを思い出させるだけです。非常にまれなので、そうするかどうか、またはすべてが中国語のように聞こえるかどうかがまだわからない場合は、警告を無視してください。

于 2012-07-04T14:35:57.730 に答える
1

アプリケーションで複数のAppDomainを使用しない場合は、無視するか、抑制することができると思います。

于 2012-07-04T10:43:01.143 に答える