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

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

本演练将引导您逐步完成使用代码分析工具分析 .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 文件添加代码 usingSystem;。

  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. 重新生成项目。

在完成更改后, 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. 重新生成项目。

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