Microsoft 擴充正確性規則程式碼分析規則集
「Microsoft 擴充正確性規則」規則集會讓程式碼分析回報的邏輯和 Framework 使用錯誤達到最大的功效。 另外則特別強調 COM 互通性和行動應用這類特定案例。 如果其中一個案例適合您的專案或您想找出專案的其他問題,請考慮包含這個規則集。
「Microsoft 擴充正確性規則」規則集包含「Microsoft 基本正確性規則」規則集中的規則。 「基本正確性規則」包含「Microsoft 最小建議規則」規則集中的規則。 如需詳細資訊,請參閱 Microsoft 基本正確性規則程式碼分析規則集和 Microsoft 最小建議規則:程式碼分析規則集。
下表說明「Microsoft 擴充正確性規則」規則集中的所有規則。
規則 |
說明 |
---|---|
無法提供整組的建構函式會導致難以正確地處理例外狀況。 |
|
如果方法使用 URI 字串表示,應該提供採用 URI 類別的對應多載,這樣就可以透過安全的方式提供這些服務。 |
|
此規則假設方法會傳回統一資源識別元 (URI)。 URI 的字串表示方式容易發生剖析和編碼錯誤,並且可能因此產生安全性弱點。 System.Uri 類別以安全的方式提供這些服務。 |
|
此規則假設屬性代表統一資源識別元 (URI)。 URI 的字串表示方式容易發生剖析和編碼錯誤,並且可能因此產生安全性弱點。 System.Uri 類別以安全的方式提供這些服務。 |
|
型別會宣告方法多載,這些方法多載的差別只在於以 System.Uri 參數取代字串參數。 接受字串參數的多載不會呼叫接受 URI 參數的多載。 |
|
當多載方法會對 COM 用戶端公開 (Expose) 時,只有第一個方法多載會保留它的名稱。 後續的多載則會透過將名稱附加至底線字元 (_) 和對應於多載宣告之順序的整數,重新命名為唯一的名稱。 |
|
Visual Basic 6 COM 用戶端無法存取 64 位元整數。 |
|
COM 不支援靜態方法。 |
|
使用雙重介面 (Dual Interface) 的型別可讓用戶端繫結至特定的介面配置。 在未來版本中,若型別或任何基底型別 (Base Type) 的配置有所變更,將會中斷繫結至此介面的 COM 用戶端。 根據預設,如果未指定 ClassInterfaceAttribute 屬性,則會使用分派介面。 |
|
特別標示為 COM 可見的參考型別 (Reference Type) 包含公用參數化建構函式,但不包含公用預設 (無參數) 建構函式。 COM 用戶端無法建立沒有公用預設建構函式的型別。 |
|
以 System.Runtime.InteropServices.ComRegisterFunctionAttribute 屬性或以 System.Runtime.InteropServices.ComUnregisterFunctionAttribute 屬性標記的方法為外部可見。 |
|
型別以 System.Runtime.InteropServices.ComSourceInterfacesAttribute 屬性標記,而且至少其中一個特定介面不是以設為 ComInterfaceType.InterfaceIsIDispatch 的 System.Runtime.InteropServices.InterfaceTypeAttribute 屬性標記。 |
|
COM 可見之實值型別的非公用執行個體欄位對 COM 用戶端而言是可見的。 請檢閱不應該公開之資訊的欄位內容,或是會造成未預期的設計或安全性結果的欄位內容。 |
|
布林資料型別在 Unmanaged 程式碼中有多種表示。 |
|
請勿將處理序優先權設定為 Idle。 具有 System.Diagnostics.ProcessPriorityClass.Idle 的處理序會在應該閒置的時候佔用 CPU,因而阻礙 CPU 待命。 |
|
更高頻率的週期性活動會使 CPU 始終處於忙碌狀態,並且會干擾用於關閉顯示器和硬碟的省電閒置計時器。 |
|
請盡可能避免使用完成項,因為追蹤物件存留期 (Lifetime) 時將會產生額外的效能負荷。 空白完成項只會增加額外負荷,而沒有任何好處。 |
|
NeutralResourcesLanguage 屬性 (Attribute) 會告知 ResourceManager,用來顯示組件之中性文化特性 (Culture) 資源的語言。 這可改善載入第一個資源的查詢效能,而且可以減少您的工作集。 |
|
成員呼叫了可能有危險或問題的方法。 |
|
Managed 執行緒已視為 Win32 執行緒。 |
|
方法主體中的常值 (Literal) 字串包含一個或多個 Microsoft 拼字檢查程式庫無法辨識的字。 |
|
既非常數,亦非唯讀的靜態欄位不是安全執行緒。 必須小心控制對這類欄位的存取,而且需要進階的程式設計技巧同步 (Synchronize) 對類別物件的存取。 |
|
從外部可見的列舉會以 FlagsAttribute 標記,並且有一個或多個不是二的次方,或組合列舉上其他定義值之次方的值。 |
|
GetHashCode 會依據目前執行個體傳回值,適用於雜湊演算法和資料結構,如雜湊資料表。 兩個型別相同且相等的物件必須傳回相同的雜湊程式碼。 |
|
在 finally 或 fault 子句中引發例外狀況時,新的例外狀況會隱藏作用中的例外狀況。 在 filter 子句中引發例外狀況時,執行階段會以無訊息模式攔截例外狀況。 這將使原始錯誤變得難以偵測及偵錯。 |
|
偵測到運算子多載,且找不到預期的具名替代方法。 具名的替代成員會提供與運算子相同的功能存取,並且可供以不支援多載運算子 (Overloaded Operator) 的語言設計程式的開發人員使用。 |
|
使用 .NET Framework 發行前版本建置的資源檔,可能無法讓 .NET Framework 的支援版本使用。 |
|
公用或保護的型別包含使用 VarArgs 呼叫慣例之公用或保護的方法,而不是 params 關鍵字。 |
|
如果沒有先驗證運算元,以確定運算結果不會超過所包含之資料型別的可能值範圍,則不應執行算術運算。 |
|
呼叫字串參數名稱包含 "uri"、"URI"、"urn"、"URN"、"url" 或 "URL", 而且此方法的宣告型別會包含具有 System.Uri 參數的對應方法多載。 |
|
屬性的字串常值參數未針對 URL、GUID 或版本進行正確剖析。 |