共用方式為


Microsoft 擴充正確性規則程式碼分析規則集

「Microsoft 擴充正確性規則」規則集會讓程式碼分析回報的邏輯和 Framework 使用錯誤達到最大的功效。 另外則特別強調 COM 互通性和行動應用這類特定案例。 如果其中一個案例適合您的專案或您想找出專案的其他問題,請考慮包含這個規則集。

「Microsoft 擴充正確性規則」規則集包含「Microsoft 基本正確性規則」規則集中的規則。 「基本正確性規則」包含「Microsoft 最小建議規則」規則集中的規則。 如需詳細資訊,請參閱 Microsoft 基本正確性規則程式碼分析規則集Microsoft 最小建議規則:程式碼分析規則集

下表說明「Microsoft 擴充正確性規則」規則集中的所有規則。

規則

說明

CA1032:必須實作標準例外狀況建構函式

無法提供整組的建構函式會導致難以正確地處理例外狀況。

CA1054:URI 參數不應該為字串

如果方法使用 URI 字串表示,應該提供採用 URI 類別的對應多載,這樣就可以透過安全的方式提供這些服務。

CA1055:URI 傳回值不應該為字串

此規則假設方法會傳回統一資源識別元 (URI)。 URI 的字串表示方式容易發生剖析和編碼錯誤,並且可能因此產生安全性弱點。 System.Uri 類別以安全的方式提供這些服務。

CA1056:URI 屬性不應該為字串

此規則假設屬性代表統一資源識別元 (URI)。 URI 的字串表示方式容易發生剖析和編碼錯誤,並且可能因此產生安全性弱點。 System.Uri 類別以安全的方式提供這些服務。

CA1057:字串 URI 多載呼叫 System.Uri 多載

型別會宣告方法多載,這些方法多載的差別只在於以 System.Uri 參數取代字串參數。 接受字串參數的多載不會呼叫接受 URI 參數的多載。

CA1402:避免在 COM 可見介面中多載

當多載方法會對 COM 用戶端公開 (Expose) 時,只有第一個方法多載會保留它的名稱。 後續的多載則會透過將名稱附加至底線字元 (_) 和對應於多載宣告之順序的整數,重新命名為唯一的名稱。

CA1406:避免對 Visual Basic 6 用戶端使用 Int64 引數

Visual Basic 6 COM 用戶端無法存取 64 位元整數。

CA1407:避免在 COM 可見型別中使用靜態成員

COM 不支援靜態方法。

CA1408:不要使用 AutoDual ClassInterfaceType

使用雙重介面 (Dual Interface) 的型別可讓用戶端繫結至特定的介面配置。 在未來版本中,若型別或任何基底型別 (Base Type) 的配置有所變更,將會中斷繫結至此介面的 COM 用戶端。 根據預設,如果未指定 ClassInterfaceAttribute 屬性,則會使用分派介面。

CA1409:COM 可見型別應該是可建立的

特別標示為 COM 可見的參考型別 (Reference Type) 包含公用參數化建構函式,但不包含公用預設 (無參數) 建構函式。 COM 用戶端無法建立沒有公用預設建構函式的型別。

CA1411:COM 註冊方法不應該為可見的

以 System.Runtime.InteropServices.ComRegisterFunctionAttribute 屬性或以 System.Runtime.InteropServices.ComUnregisterFunctionAttribute 屬性標記的方法為外部可見。

CA1412:將 ComSource 介面標記為 IDispatch

型別以 System.Runtime.InteropServices.ComSourceInterfacesAttribute 屬性標記,而且至少其中一個特定介面不是以設為 ComInterfaceType.InterfaceIsIDispatch 的 System.Runtime.InteropServices.InterfaceTypeAttribute 屬性標記。

CA1413:避免在 COM 可見的實值型別中使用非公用欄位

COM 可見之實值型別的非公用執行個體欄位對 COM 用戶端而言是可見的。 請檢閱不應該公開之資訊的欄位內容,或是會造成未預期的設計或安全性結果的欄位內容。

CA1414:以 MarshalAs 標記布林值 P/Invoke 引數

布林資料型別在 Unmanaged 程式碼中有多種表示。

CA1600:不要使用 Idle 處理序優先權

請勿將處理序優先權設定為 Idle。 具有 System.Diagnostics.ProcessPriorityClass.Idle 的處理序會在應該閒置的時候佔用 CPU,因而阻礙 CPU 待命。

CA1601:不要使用會妨礙電源狀態變更的計時器

更高頻率的週期性活動會使 CPU 始終處於忙碌狀態,並且會干擾用於關閉顯示器和硬碟的省電閒置計時器。

CA1821:必須移除空的完成項

請盡可能避免使用完成項,因為追蹤物件存留期 (Lifetime) 時將會產生額外的效能負荷。 空白完成項只會增加額外負荷,而沒有任何好處。

CA1824:以 NeutralResourcesLanguageAttribute 標記組件

NeutralResourcesLanguage 屬性 (Attribute) 會告知 ResourceManager,用來顯示組件之中性文化特性 (Culture) 資源的語言。 這可改善載入第一個資源的查詢效能,而且可以減少您的工作集。

CA2001:避免呼叫有問題的方法

成員呼叫了可能有危險或問題的方法。

CA2003:不要將 Fiber 視為執行緒

Managed 執行緒已視為 Win32 執行緒。

CA2204:常值必須使用正確的拼字

方法主體中的常值 (Literal) 字串包含一個或多個 Microsoft 拼字檢查程式庫無法辨識的字。

CA2211:非常數欄位不應該為可見的

既非常數,亦非唯讀的靜態欄位不是安全執行緒。 必須小心控制對這類欄位的存取,而且需要進階的程式設計技巧同步 (Synchronize) 對類別物件的存取。

CA2217:不要以 FlagsAttribute 標記列舉

從外部可見的列舉會以 FlagsAttribute 標記,並且有一個或多個不是二的次方,或組合列舉上其他定義值之次方的值。

CA2218:覆寫 Equals 時必須一併覆寫 GetHashCode

GetHashCode 會依據目前執行個體傳回值,適用於雜湊演算法和資料結構,如雜湊資料表。 兩個型別相同且相等的物件必須傳回相同的雜湊程式碼。

CA2219:不要在 exception 子句中引發例外狀況

在 finally 或 fault 子句中引發例外狀況時,新的例外狀況會隱藏作用中的例外狀況。 在 filter 子句中引發例外狀況時,執行階段會以無訊息模式攔截例外狀況。 這將使原始錯誤變得難以偵測及偵錯。

CA2225:運算子多載必須有具名的替代方法

偵測到運算子多載,且找不到預期的具名替代方法。 具名的替代成員會提供與運算子相同的功能存取,並且可供以不支援多載運算子 (Overloaded Operator) 的語言設計程式的開發人員使用。

CA2228:不要使用尚未發行版本所支援的格式建置資源

使用 .NET Framework 發行前版本建置的資源檔,可能無法讓 .NET Framework 的支援版本使用。

CA2230:必須使用 params 做為變數引數

公用或保護的型別包含使用 VarArgs 呼叫慣例之公用或保護的方法,而不是 params 關鍵字。

CA2233:運算不應該發生溢位

如果沒有先驗證運算元,以確定運算結果不會超過所包含之資料型別的可能值範圍,則不應執行算術運算。

CA2234:必須傳遞 System.Uri 物件,而不要傳遞字串

呼叫字串參數名稱包含 "uri"、"URI"、"urn"、"URN"、"url" 或 "URL", 而且此方法的宣告型別會包含具有 System.Uri 參數的對應方法多載。

CA2243:屬性字串常值必須正確剖析

屬性的字串常值參數未針對 URL、GUID 或版本進行正確剖析。