CA2001: 問題が発生する可能性のあるメソッドは呼び出しません

TypeName

AvoidCallingProblematicMethods

CheckId

CA2001

分類

Microsoft.Reliability

互換性に影響する変更点

なし

原因

メンバーが危険性または問題のあるメソッドを呼び出します。

規則の説明

不要または危険性のあるメソッド呼び出しを使用しないでください。

この規則違反は、メンバーが次のいずれかのメソッドを呼び出した場合に発生します。

方法

説明

GC.Collect

GC.Collect を呼び出すと、アプリケーションのパフォーマンスに重大な影響を与える可能性があります。このメソッドが必要になる場合はほとんどありません。詳細については、MSDN ブログ Rico Mariani's Performance ティドビッツ エントリを参照します。

Thread.Resume

Thread.Suspend

予測できない動作が発生することがあるため、Thread.Suspend と Thread.Resume を使用することは推奨されていません。スレッドの同期やリソースの保護を行う場合は、Monitor、[T:System.Threading.Mutex,]MutexSemaphore など、System.Threading 名前空間の他のクラスを使用してください。

SafeHandle.DangerousGetHandle

無効なハンドルを返す場合があるため、DangerousGetHandle メソッドにはセキュリティ上のリスクが伴います。DangerousGetHandle メソッドを安全に使用する方法の詳細については、DangerousAddRef メソッドおよび DangerousRelease メソッドを参照してください。

Assembly.LoadFrom

Assembly.LoadFile

Assembly.LoadWithPartialName

これらのメソッドを使用すると、予期しない場所からアセンブリが読み込まれる場合があります。たとえば、アセンブリを読み込むメソッドについては、MSDN Web サイトの LoadFile と LoadFromバインディング コンテキストの選択 " Notes Cook の .NET CLR のメモのブログの投稿の参照すれば。

CoSetProxyBlanket (Ole32)

CoInitializeSecurity (Ole32)

マネージ コード内でユーザー コードの処理が開始されてから CoSetProxyBlanket を呼び出すと、予期しない結果になる場合があります。共通言語ランタイム (CLR: Common Language Runtime) が初期化処理を実行することにより、ユーザーの P/Invoke が成功しないことがあります。

マネージ アプリケーションに対して CoSetProxyBlanket を呼び出す必要がある場合は、ネイティブ コード (C++) の実行可能ファイルを使用してプロセスを開始し、ネイティブ コード内で CoSetProxyBlanket を呼び出してから、マネージ コード アプリケーションをプロセス内で開始することをお勧めします (必ずランタイムのバージョン番号を指定してください)。

違反の修正方法

この規則違反を修正するには、危険性または問題のあるメソッドの呼び出しを削除するか、別のメソッドに置き換えます。

警告を抑制する状況

問題のあるメソッドを使用しなければならない場合にのみ、この規則からのメッセージを抑制する必要があります。

参照

その他の技術情報

信頼性の警告