信頼性規則
信頼性規則は、ライブラリとアプリケーションの信頼性 (正しいメモリやスレッドの使用など) をサポートします。 信頼性規則には、次のものが含まれます。
支配 | 形容 |
---|---|
CA2000: スコープを失う前にオブジェクトを破棄 | オブジェクトのファイナライザーの実行を妨げる例外イベントが発生する可能性があるため、オブジェクトへのすべての参照がスコープ外になる前に、オブジェクトを明示的に破棄する必要があります。 |
CA2002: ID が弱いオブジェクトをロックしない | オブジェクトは、アプリケーション ドメインの境界を越えて直接アクセスできる場合、弱い ID を持っていると言われます。 弱い ID を持つオブジェクトのロックを取得しようとするスレッドは、同じオブジェクトに対するロックを持つ別のアプリケーション ドメイン内の 2 番目のスレッドによってブロックされる可能性があります。 |
CA2007: タスク を直接待機しないでください | 非同期メソッドは、Task を直接 待機します。 |
CA2008: TaskScheduler を渡さずにタスクを作成しない | タスクの作成または継続操作では、TaskScheduler パラメーターを指定しないメソッド オーバーロードが使用されます。 |
CA2009: ImmutableCollection 値に対して ToImmutableCollection を呼び出さないでください |
ToImmutable メソッドは、名前空間から変更できないコレクションに対して不必要 System.Collections.Immutable 呼び出されました。 |
CA2011: セッター 内でプロパティを割り当てないでください | プロパティが誤って独自の set アクセサー内に値を割り当てられました。 |
CA2012: ValueTasks を正しく使用 | メンバー呼び出しから返される ValueTasks は、直接待機することを目的としています。 ValueTask を複数回使用しようとしたり、完了する前に結果に直接アクセスしようとすると、例外や破損が発生する可能性があります。 このような ValueTask を無視すると、機能バグが示され、パフォーマンスが低下する可能性があります。 |
CA2013: 値型 で ReferenceEquals を使用しないでください | System.Object.ReferenceEqualsを使用して値を比較する場合、objA と objB が値型の場合は、ReferenceEquals メソッドに渡される前にボックス化されます。 つまり、objA と objB の両方が値型の同じインスタンスを表している場合でも、ReferenceEquals メソッドは false を返します。 |
CA2014: ループで stackalloc を使用しないでください。 | stackalloc によって割り当てられたスタック領域は、現在のメソッドの呼び出しの終了時にのみ解放されます。 ループ内でこれを使用すると、スタックが無制限に増加し、最終的なスタック オーバーフロー状態が発生する可能性があります。 |
CA2015: MemoryManager<T> から派生した型のファイナライザーを定義しないでください | MemoryManager<T> から派生した型にファイナライザーを追加すると、メモリが Span<T>で使用されている間にメモリを解放できる場合があります。 |
CA2016: CancellationToken パラメーターを 1 つの を受け取るメソッドに転送する | 操作の取り消し通知が正しく伝達されるように、CancellationToken パラメーターを受け取るメソッドに転送するか、明示的に CancellationToken.None 渡してトークンを伝達しないことを示します。 |
CA2017: パラメーター数の不一致 | ログ メッセージ テンプレートで指定されたパラメーターの数が、名前付きプレースホルダーの数と一致しません。 |
CA2018: Buffer.BlockCopy する count 引数は、コピーするバイト数を指定する必要があります |
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 以前のバージョンのユーザー定義演算子とは動作が異なります。 オーバーフロー中にチェックされていないコンテキストでスローしていた演算子の中には、チェックされたコンテキスト内でラップされない限り、もうスローされないものもあります。 以前にチェックされたコンテキストでスローされなかった演算子の中には、チェックされていないコンテキスト内でラップされない限り、スローされるものもあります。 |
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 が返されます。 |
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET