演练:对托管代码进行代码缺陷分析

通过使用代码分析工具,在本演练中,您分析代码缺陷的托管项目。

本演练使用代码分析来将逐步指导您分析一致性的 .NET 托管代码程序集与 Microsoft .NET framework 设计准则。

在本演练中,您可以:

  • 分析并更正代码缺陷警告。

系统必备

  • Visual Studio 高级专业版.

创建类库

创建类库

  1. 在 Visual Studio文件 菜单上,单击 新建 然后单击 项目

  2. 新建项目 对话框中,在 项目类型下,单击 Visual C#

  3. 模板下,选择 类库

  4. 名称升级过程中或新数据库需要 -ra 参数 文本框中,键入 CodeAnalysisManagedDemo 然后单击 确定

  5. 在创建项目后,打开 Class1.cs 文件。

  6. 用下列代码替换 Class1.cs 中的现有文本:

    //CodeAnalysisManagedDemo
    //Class1.cs
    using System;
    namespace testCode
    {
        
        public class demo : Exception
        {
            
            public static void Initialize(int size) { }
            protected static readonly int _item;
            public static int item { get { return _item; } }
        }
    }
  7. 保存 Class1.cs 文件。

分析项目

分析代码缺陷的托管项目

  1. 选择在 解决方案资源管理器的 CodeAnalysisManagedDemo 项目。

  2. 项目 菜单上,单击 属性

    CodeAnalysisManagedDemo 属性页中显示。

  3. 单击 代码分析

  4. 确保 启用代码在生成的分析 (定义了 CODE_ANALYSIS 常数) 进行检查。

  5. 从的 运行此规则集 下拉列表中,选择 Microsoft 的所有规则

  6. 文件 菜单上,单击 保存选定项,然后关闭 ManagedDemo 属性页。

  7. 生成 菜单上,单击 生成 ManagedDemo

    CodeAnalysisManagedDemo 项目生成警告。 代码分析输出 窗口中报告。

    如果 代码分析 窗口不会显示,在 分析 菜单中,选择 窗口 然后 选择代码分析

更正代码分析问题

更正代码分析规则冲突

  1. 视图 菜单上,单击 错误列表

    根据选择的开发人员配置文件,您可能必须指向在 视图 菜单的 其他窗口 ,然后单击 错误列表

  2. 解决方案资源管理器,单击 显示所有文件

  3. 接下来,展开属性节点,然后打开 AssemblyInfo.cs 文件。

  4. 使用下表更正警告:

警告

更正警告

CA1014:用 CLSCompliantAttribute 标记程序集:Microsoft.Design:“应使用 CLSCompliantAttribute 来标记 " demo ",,其值应为 true。

  1. 添加代码 usingSystem; 到 AssemblyInfo.cs 文件中。

  2. 接下来,添加代码 [assembly: CLSCompliant(true)] 到 AssemblyInfo.cs 文件的结尾。

  3. 重新生成项目。

CA1032:实现标准异常构造函数:Microsoft.Design:添加下面的构造函数添加到此类:public demo (字符串)

  • 添加构造函数 public demo (String s) : base(s) { } 到类 demo。

CA1032:实现标准异常构造函数:Microsoft.Design:添加下面的构造函数添加到此类:public demo (字符串,异常)

  • 添加构造函数 public demo (String s, Exception e) : base(s, e) { } 到类 demo。

CA1032:实现标准异常构造函数:Microsoft.Design:添加下面的构造函数添加到此类:protected demo (SerializationInfo, StreamingContext)

  1. 添加代码 using System.Runtime.Serialization;到 Class1.cs 文件的开头。

  2. 接下来,添加构造函数 protected demo (SerializationInfo info, StreamingContext context) : base(info, context) { } to the class demo.

  3. 重新生成项目。

CA1032:实现标准异常构造函数:Microsoft.Design:添加下面的构造函数添加到此类:public demo ()

  1. 添加构造函数 public demo () : base() { } 到类demo.

  2. 重新生成项目。

CA1709:标识符的大小写应当正确:Microsoft.Naming:更正命名空间名称 " testCode " 更改为 " TestCode。

  • 更改命名空间 testCode 的框添加到 TestCode。

CA1709:标识符的大小写应当正确:Microsoft.Naming:更正类型名称 “demo " 通过更改为 " Demo。

  • 更改成员的名称。 Demo。

CA1709:标识符的大小写应当正确:Microsoft.Naming:更正成员名称 “item " 通过更改为 " Item。

  • 更改成员的名称。 Item。

CA1710:标识符应具有正确的后缀:Microsoft.Naming:重命名 " testCode.demo " 使其以 " Exception " 结尾。

  • 将类及其构造函数的名称。 DemoException。

CA2210:程序集应具有有效的强名称:签名 “使用强名称密钥对 " ManagedDemo。

  1. 项目 菜单上,单击 ManagedDemo 属性

    将显示项目属性。

  2. 单击 签名

  3. 选择 为程序集签名 复选框。

  4. 选择字符串名称密钥文件 列表中,选择 <新…>

    创建强名称密钥 出现对话框。

  5. 密钥文件名,键入 TestKey。

  6. 输入密码然后单击 确定

  7. 文件 菜单上,单击 保存选定项,然后关闭属性页。

  8. 重新生成项目。

CA2237:以 SerializableAttribute 标记 ISerializable 类型:Microsoft.Usage:将 [serializable] 特性添加到类型 " demo ",此类型实现 ISerializable。

  1. 添加 [Serializable ()] 属性添加到类 demo。

  2. 重新生成项目。

在完成更改后, Class1.cs 文件应类似于:

//CodeAnalysisManagedDemo
//Class1.cs
using System;
using System.Runtime.Serialization;


namespace TestCode
{

    [Serializable()] 
    public class DemoException : Exception
    {
        public DemoException () : base() { }
        public DemoException(String s) : base(s) { }
        public DemoException(String s, Exception e) : base(s, e) { }
        protected DemoException(SerializationInfo info, StreamingContext context) : base(info, context) { }

        public static void Initialize(int size) { }
        protected static readonly int _item;
        public static int Item { get { return _item; } }
    }
}

排除代码分析警告

排除代码缺陷警告

  1. 对于每一个剩余警告,请执行以下操作:

    1. 在代码分析窗口中,选择该警告。

    2. 选择 操作,然后选择 禁止显示消息,然后选择 在项目禁止显示文件中

    有关更多信息,请参见 如何:使用菜单项禁止显示警告

  2. 重新生成项目。

    不出现任何警告或错误的项目生成。