“源代码中禁止显示”概述
檢查代碼之后,您可能確定代碼是正確的。也可能是以下情況,即某些沖突的優先級較低,因此不會在當前的開發周期中修復。無論出于何種原因,以下操作通常是有用的,即指出相應警告不適用,以使小組成員了解代碼已經過檢查并已決定取消警告。“源代碼中禁止顯示”(ISS) 很有用,因為開發人員可以將取消警告的修飾放在靠近警告本身的位置。
-
SuppressMessage 屬性
使用有條件發出的托管代碼自定義屬性?SuppressMessage?來呈現“源代碼中禁止顯示”。該屬性具有下列組成部分:
?
[Scope:SuppressMessage("Rule Category", "Rule Id", "Justification", "MessageId", "Scope", "Target")]
?
-
Rule Category:定義的規則所屬的類別。
-
Rule Id:規則的標識符。支持對規則 ID 的使用短名稱或長名稱。短名稱為 CAXXXX;長名稱為 CAXXXX:FriendlyTypeName。
-
Target:用于指定在其上禁止顯示警告的目標的標識符。
-
Justification:用于記錄禁止顯示消息的原因的文本。
-
Scope:在其上禁止顯示警告的目標。如果未指定目標,則設置為屬性的目標。支持的范圍包括:
-
模塊
-
命名空間
-
資源
-
類型
-
成員
-
參數
-
Message Id:方法的名稱。
-
-
用法
常見的情況是在?SuppressMessage?屬性的實例所應用于的級別禁止顯示沖突。禁止顯示的一般形式包括規則類別和一個規則標識符,該標識符包含可選的規則名稱的用戶可讀表示形式。它優先于記錄規則名稱的源代碼注釋,以確保信息與排除緊密相連。例如,
[SuppressMessage("Microsoft.Design", "CA1021:Avoid out parameters")]
?
如果出于嚴格的性能原因,要求最大程度地減少 ISS 元數據,則可以省略規則名稱本身。規則類別及其“rule id”(規則 ID)一起構成足夠唯一的規則標識符。例如,
[SuppressMessage("Microsoft.Design", "CA1021")]
出于可維護性的原因,建議不要使用該格式。
?
-
在方法體內禁止顯示多個沖突
屬性只能應用于方法,而不能嵌入到方法體中。但是,您可以將方法名稱指定為消息 ID,以便在方法體內多次出現沖突時進行區分。
在下面的示例中,方法 Test 引發對 Fair () 和 Bad () 的所有調用的托管代碼分析沖突。SuppressMessage?屬性禁止顯示對 Fair 的所有調用的沖突;對 Bad 的調用仍會引發沖突。
?
[SuppressMessage("Microsoft.Design?", "CA1039:Lists are strongly typed", MessageId=?"F1")]
void Test()
{
Fair(); // calling Fair() causes violations
Bad(); // calling Bad()also raises violations
Fair(); // calling Fair() causes violations
}
?
-
模塊級禁止顯示
托管代碼分析工具檢查在程序集、模塊、類型、成員或參數級應用的?SuppressMessage?屬性。它還針對資源和命名空間引發沖突。這些沖突必須在模塊級應用,并且是有范圍的。例如,下面的消息禁止顯示命名空間沖突:
[module: SuppressMessage("Microsoft.Naming", "CA1004:AvoidMisspelledNamespaces", Scope="namespace", Target="Microsoft.Design", Id="Fair")]
?
任何禁止顯示都可以通過指定一個顯式范圍來表示。這些禁止顯示必須在模塊級啟用;但是,您不能通過修飾某個類型來指定成員級的禁止顯示。對于引用并不映射到顯式提供的用戶源的編譯器生成的代碼的消息,模塊級禁止顯示是禁止顯示它們的唯一方法。例如,下面的代碼示例禁止顯示針對編譯器發出的構造函數的沖突:
?
[module: SuppressMessage("Microsoft.Design", "CA1055:AbstractTypesDoNotHavePublicConstructors", Scope="member", Target="Microsoft.Tools.FxCop.Type..ctor()")]
注意???目標始終包含完全限定的項名稱。
-
全局禁止顯示文件
全局禁止顯示文件維護沒有目標的禁止顯示行為。例如,程序集級沖突存儲在該文件中。此外,某些 ASP.NET 禁止顯示之所以存儲在該文件中,還因為項目級別設置對于代碼隱藏的窗體不可用。
轉載于:https://www.cnblogs.com/myitm/archive/2010/03/30/1700314.html
總結
以上是生活随笔為你收集整理的“源代码中禁止显示”概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 书------编程(理论方面)
- 下一篇: 关于旅游