可靠性規則
可靠性規則支援程式庫和應用程式可靠性,例如正確的記憶體和執行緒使用量。 可靠性規則包括:
規則 | 描述 |
---|---|
CA2000:必須在超出範圍前處置物件 | 因為可能會發生例外事件以防止執行物件的完成項,所以應在物件的所有參考都超出範圍之前,明確處置物件。 |
CA2002:不要鎖定具有弱式識別的物件 | 可以跨應用程式定義域範圍直接存取的物件,即所謂具有弱式識別的物件。 嘗試取得具有弱式識別之物件鎖定的執行緒,可以被不同應用程式定義域中具有相同物件鎖定的第二個執行緒所封鎖。 |
CA2007:不直接等候工作 | 非同步方法會直接等候Task。 |
CA2008:建立工作時請務必傳遞 TaskScheduler | 工作建立或接續作業會使用未指定 TaskScheduler 參數的方法多載。 |
CA2009:請勿對 ImmutableCollection 值呼叫 TolmmutableCollection | 在 System.Collections.Immutable 命名空間中不可變的集合上非必要地呼叫 ToImmutable 方法。 |
CA2011:請勿在屬性 setter 中指派屬性 | 不小心在自己的 set 存取子內為屬性指派值。 |
CA2012:必須正確使用 ValueTasks | 從成員叫用傳回的 ValueTasks 預計會直接等候。 嘗試多次取用 ValueTask,或在已知完成之前直接存取某個結果,可能會導致例外狀況或損毀。 忽略這類 ValueTask 可能是功能錯誤 (bug) 的指示,而且可能會導致效能降低。 |
CA2013:請勿使用具有值類型的 ReferenceEquals | 使用 System.Object.ReferenceEquals 比較值時,如果 objA 和 objB 是實值型別,則會在傳遞給 ReferenceEquals 方法之前進行 Box 處理。 這表示即使 objA 和 objB 都代表實值型別的相同執行個體,ReferenceEquals 方法仍會傳回 false。 |
CA2014:請勿在迴圈中使用 stackalloc。 | stackalloc 所配置的堆疊空間只會在目前方法叫用的結尾釋放。 在迴圈中使用可能會導致未繫結的堆疊成長和最終堆疊溢位狀況。 |
CA2015:請勿針對衍生自 MemoryManager<T> 的型別定義完成項 | 將完成項新增到衍生自 MemoryManager<T> 的型別時,可能會允許在 Span<T> 仍在使用記憶體時,釋出該記憶體。 |
CA2016:將 CancellationToken 參數傳遞給使用該參數的方法 | 將 CancellationToken 參數轉送給方法,以確保作業取消通知能正確地散佈,或明確地傳入 CancellationToken.None ,以表示刻意不散佈權杖。 |
CA2017:參數計數不符 | 記錄訊息範本中提供的參數數目不符合具名預留位置的數目。 |
CA2018:Buffer.BlockCopy 的引數 count 應指定要複製的位元組數目 |
使用 Buffer.BlockCopy 時,count 引數會指定要複製的位元組數目。 您應只在元素的大小剛好是一個位元組的陣列上將 Array.Length 用於該 count 引數。 byte 、sbyte 和 bool 陣列具有大小為一個位元組的元素。 |
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) 指定與輸入集合類型不相容的類型參數。 |