適用於 Managed 程式碼的基本正確性規則規則集
「Microsoft 基本正確性規則」規則集將焦點放在使用 Framework API 時的邏輯錯誤和常見的錯誤。「基本正確性規則」包含「Microsoft 最小建議規則」規則集中的規則。如需詳細資訊,請參閱 適用於 Managed 程式碼的 Managed 建議規則規則集。您應包含此規則集,將最小建議規則所回報的警告清單加以擴大。
下表說明「Microsoft 基本正確性規則」規則集中的所有規則。
規則 |
描述 |
---|---|
具有可處置欄位的型別應該是可處置的 |
|
正確宣告事件處理常式 |
|
以 AssemblyVersionAttribute 標記組件 |
|
介面方法應該要可以由子型別呼叫 |
|
擁有原生資源的型別應為可處置 |
|
將 P/Invokes 移到 NativeMethods 類別 |
|
不要隱藏基底類別方法 |
|
必須正確實作 IDisposable |
|
不要在非預期的位置中引發例外狀況 |
|
避免使用重複的快速鍵 |
|
P/Invoke 進入點應該要存在 |
|
P/Invokes 不應該為可見的 |
|
自動配置型別不應該是 COM 可見的 |
|
必須在 P/Invoke 之後立即呼叫 GetLastError |
|
COM 可見型別的基底型別應該是 COM 可見的 |
|
應該符合 COM 註冊方法 |
|
P/Invokes 必須正確宣告 |
|
必須移除空的完成項 |
|
實值型別欄位應該為可移植的 |
|
P/Invoke 宣告應該是可移植的 |
|
請勿鎖定具有弱式識別的物件 |
|
必須檢視 SQL 查詢中是否有安全性弱點 |
|
必須指定 P/Invoke 字串引數的封送處理 |
|
必須檢查實值型別上的宣告式安全性 |
|
指標不應該為可見的 |
|
受保護型別不應公開欄位 |
|
方法安全性應該是型別的超集合 |
|
APTCA 方法應該只呼叫 APTCA 方法 |
|
APTCA 型別應該只擴充 APTCA 基底型別 |
|
不要間接公開具有連結要求的方法 |
|
覆寫連結要求應該與基底相同 |
|
必須將有弱點的 finally 子句包裝在外層 try 中 |
|
必須同時具有型別連結要求和繼承要求 |
|
安全性關鍵型別可能未參與型別等價 |
|
預設建構函式至少必須和基底型別的預設建構函式一樣關鍵 |
|
委派必須繫結至透明度一致的方法 |
|
覆寫基底方法時,方法必須保持一致的透明度 |
|
透明方法必須只包含可驗證的 IL |
|
透明方法不可以使用 SuppressUnmanagedCodeSecurity 屬性呼叫方法 |
|
透明程式碼不可以參考安全性關鍵項目 |
|
透明方法不可以滿足 LinkDemand |
|
型別至少必須和基底型別與介面一樣關鍵 |
|
透明的方法不可以使用安全性判斷提示 |
|
透明方法不可以呼叫機器碼 |
|
請重新擲回以保存堆疊詳細資料 |
|
不要多次處置物件 |
|
必須初始化實值型別的靜態內嵌欄位 |
|
不要以 WebMethod 標記 Serviced 元件 |
|
可處置的欄位應該受到處置 |
|
不要呼叫建構函式中的可覆寫方法 |
|
可處置型別應該宣告完成項 |
|
完成項應該呼叫基底類別完成項 |
|
請實作序列化建構函式 |
|
覆寫 ValueType.Equals 時必須一併多載等號比較運算子 |
|
以 STAThread 標記 Windows Form 進入點 |
|
必須標記所有不可序列化的欄位 |
|
必須呼叫 ISerializable 型別上的基底類別方法 |
|
必須以 SerializableAttribute 標記 ISerializable 型別 |
|
請正確實作序列化方法 |
|
必須正確實作 ISerializable |
|
必須提供格式化方法的正確引數 |
|
必須正確地測試 NaN |
|
列舉值中應該要有值為零的成員 |
|
多載加號和減號運算子時必須一併多載等號比較運算子 |
|
不要將常值當做已當地語系化的參數傳遞 |
|
必須將字串標準化為大寫字母 |
|
不要忽略方法的結果 |
|
正確呼叫 GC.SuppressFinalize |
|
屬性不應傳回陣列 |
|
應該使用字串長度測試空白字串 |
|
只使用來自目標架構的 API |
|
必須移除對 GC.KeepAlive 的呼叫 |
|
使用 SafeHandle 封裝原生資源 |
|
在一般處理常式中攔截非 CLSCompliant 的例外狀況 |
|
不要宣告唯讀的可變動參考型別 |
|
陣列欄位不應為唯讀 |
|
保護判斷提示 |
|
使用原生資源時必須呼叫 GC.KeepAlive |
|
密封方法以滿足私用介面的要求 |
|
必須保護序列化建構函式 |
|
靜態建構函式應為私用 |
|
安全性關鍵常數應該是透明的 |
|
必須使用 Win32 API 的 Managed 對應項 |
|
Dispose 方法應該呼叫基底類別處置 |
|
完成項應該受到保護 |
|
請勿降低繼承成員的可視性 |
|
成員不應該只有在傳回型別上不同 |
|
多載等號比較運算子時必須一併覆寫 Equals |
|
運算子應該有對稱的多載 |
|
集合屬性應該為唯讀 |
|
必須為選擇性欄位提供還原序列化方法 |