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

在本演练中,使用代码分析工具对托管项目进行代码缺陷分析。

本演练将引导您逐步完成使用代码分析工具分析 .NET 托管代码程序集是否符合 Microsoft .NET Framework 设计准则的过程。

在本演练中,您:

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

系统必备

  • Visual Studio 高级专业版.

创建类库

创建类库

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

  2. “新建项目”对话框的“项目类型”下,单击“Visual C#”

  3. “模板”下,选择“类库”

  4. “名称”文本框中,键入 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. 向 AssemblyInfo.cs 文件添加代码 using System;。

  2. 下一步,在 AssemblyInfo.cs 文件的末尾添加代码 [assembly: CLSCompliant(true)]。

  3. 重新生成项目。

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

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

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

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

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

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

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

  3. 重新生成项目。

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

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

  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. 向类 demo 添加 [Serializable ()] 特性。

  2. 重新生成项目。

排除代码分析警告

排除代码缺陷警告

  1. 选择**“错误列表”中的其余警告并右击,指向“禁止显示消息”,再单击“在项目禁止显示文件中”**。 有关更多信息,请参见如何:使用菜单项禁止显示警告

  2. 重新生成项目。

    将生成项目,并且不出现任何警告或错误。