zoukankan      html  css  js  c++  java
  • “源代码中禁止显示”概述

    检查代码之后,您可能确定代码是正确的。也可能是以下情况,即某些冲突的优先级较低,因此不会在当前的开发周期中修复。无论出于何种原因,以下操作通常是有用的,即指出相应警告不适用,以使小组成员了解代码已经过检查并已决定取消警告。“源代码中禁止显示”(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 禁止显示之所以存储在该文件中,还因为项目级别设置对于代码隐藏的窗体不可用。

  • 相关阅读:
    【php】PHP检测json格式数据
    【php】PHP那些非常有用却鲜有人知的函数
    MySQL DELETE 语句:语法及案例剖析、从命令行中删除数据
    MySQL UPDATE 更新:语法及案例剖析
    MySQL WHERE 子句:语法及案例剖析、从命令提示符中读取数据
    mysql实现主从复制/主从同步
    docker安装mysql方法
    MySQL之账户管理的几种方式
    MySQL 查询数据:语法及案例剖析
    MySQL 插入数据:语法以及案例剖析
  • 原文地址:https://www.cnblogs.com/myitm/p/1700314.html
Copyright © 2011-2022 走看看