信頼性の規則は、メモリやスレッドの適切な使用など、ライブラリとアプリケーションの信頼性をサポートします。 次のような信頼性の規則があります。
ルール | 説明 |
---|---|
CA2000: スコープを失う前にオブジェクトを破棄してください | 例外的なイベントが発生するとオブジェクトのファイナライザーを実行できないため、オブジェクトに対するすべての参照がスコープ外になる前に、オブジェクトを明示的に破棄する必要があります。 |
CA2002: ID が不十分なオブジェクトをロックしないでください | アプリケーション ドメインの境界を越えてオブジェクトに直接アクセスできる場合、そのオブジェクトの ID は不十分と表現されます。 スレッドで ID が不十分なオブジェクトをロックしようとすると、ブロックされることがあります。たとえば、異なるアプリケーション ドメインの別スレッドで、既に同じオブジェクトがロックされている場合です。 |
CA2007: タスクを直接待機しないでください | 非同期メソッドでは を直接Taskします。 |
CA2008: TaskScheduler を渡さずにタスクを作成しないでください | タスクの作成または継続の操作で、TaskScheduler パラメーターを指定しないメソッド オーバーロードを使用しています。 |
CA2009: ImmutableCollection 値で ToImmutableCollection を呼び出さないでください |
ToImmutable メソッドが System.Collections.Immutable 名前空間から変更できないコレクションで不必要に呼び出されました。 |
CA2011: セッター内でプロパティを割り当てないでください | プロパティの set アクセサー内でプロパティに値が誤って割り当てられました。 |
CA2012: ValueTask を正しく使用する必要があります | メンバーの呼び出しから返される ValueTask は、直接待機される必要があります。 ValueTask を複数回使用しようとするか、完了が判明する前に結果に直接アクセスしようとすると、例外または破損が発生する可能性があります。 このような ValueTask を無視することは、機能的なバグを示していることが多く、パフォーマンスを低下させる可能性があります。 |
CA2013: 値の型と共に ReferenceEquals を使用しないでください | System.Object.ReferenceEquals を使用して値を比較するときに、objA と objB が値の型である場合、この 2 つは ReferenceEquals メソッドに渡される前にボックス化されます。 つまり、objA と objB が同じ値の型のインスタンスを表している場合でも、ReferenceEquals メソッドからは false が返されます。 |
CA2014: ループ内で stackalloc を使用しないでください | stackalloc によって割り当てられたスタック領域は、現在のメソッド呼び出しの終了時にのみ解放されます。 これをループ内で使用すると、スタックが無限に増加し、最終的にスタック オーバーフロー状態が発生する可能性があります。 |
CA2015: MemoryManager<T> から派生した型にはファイナライザーを定義しません | MemoryManager<T> から派生した型にファイナライザーを追加すると、Span<T> によってまだ使用中のメモリが解放される可能性があります。 |
CA2016: CancellationToken パラメーターは、これを受け取るメソッドに転送してください |
CancellationToken パラメーターを 1 つを取るメソッドに転送して操作のキャンセル通知が適切に伝達されるようにするか、または CancellationToken.None を明示的に渡して意図的にトークンを伝達しないことを指定します。 |
CA2017: パラメーター カウントが一致しません | ログ メッセージ テンプレートで指定されたパラメーターの数が、名前付きプレースホルダーの数と一致しません。 |
CA2018: count に対する Buffer.BlockCopy の引数で、コピーするバイト数を指定する必要があります |
Buffer.BlockCopy を使用するとき、count 引数では、コピーするバイト数を指定します。
Array.Length は、その要素のサイズが正確に 1 バイトの配列上の count 要素にのみ使用します。
byte 、sbyte 、および bool には、サイズが 1 バイトの要素があります。 |
CA2019: ThreadStatic フィールドではインライン初期化を使用しないでください |
ThreadStaticAttribute で注釈が付けられたフィールドは、static (Visual Basic の Shared ) コンストラクターでインラインで初期化または明示的に初期化されます。 |
CA2020: IntPtr/UIntPtr の組み込み演算子によって発生する動作変更を回避してください | .NET 7 で追加されたいくつかの組み込み演算子の動作が、.NET 6 以前のバージョンのユーザー定義演算子とは異なります。 オーバーフロー中に unchecked コンテキストでスローしていた一部の演算子が、checked コンテキスト内でラップされない限り、スローしなくなります。 以前は checked コンテキストでスローしなかった一部の演算子が、unchecked コンテキスト内でラップされない限りスローするようになります。 |
CA2021: 互換性のない型を指定して Enumerable.Cast<T> または Enumerable.OfType<T> を呼び出さないでください | Enumerable.Cast<TResult>(IEnumerable) または Enumerable.OfType<TResult>(IEnumerable) の呼び出しで、入力コレクションの型と互換性のない型パラメーターが指定されています。 |
CA2022: Stream.Read で読み取りを不正確にしないでください |
Stream.Read を呼び出すと、要求されたバイト数よりも少ないバイト数が返される可能性があり、戻り値がチェックされていない場合は信頼できないコードになります。 |
CA2024: 非同期メソッドで StreamReader.EndOfStream を使用しないでください | このプロパティ StreamReader.EndOfStream は、データがバッファーに格納されていない場合に、意図しない同期ブロッキングを引き起こす可能性があります。 代わりに、StreamReader.ReadLineAsync() を直接使用します。ストリームの末尾に到達すると null が返されます。 |
CA2025: IDisposable インスタンスを未確認のタスクに渡さないでください |
待機しないタスクがIDisposable インスタンスを使用する場合、それらのインスタンスは破棄された後も長時間使用され続けることがあります。 インスタンスが破棄される前に、それらのインスタンスを使用するタスクが完了していることを確認します。 |
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET