演练:使用静态代码分析查找代码缺陷
本演练将通过使用旧代码分析来分析托管项目的代码缺陷。
本文将指导你完成使用旧分析分析 .NET 托管代码程序集的过程,以符合 .NET 设计准则。
创建类库
打开 Visual Studio,然后从“类库 (.NET Framework)”模板创建新项目。
将项目命名为“CodeAnalysisManagedDemo”。
创建项目后,打开“Class1.cs”文件。
将 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; } } } }
保存 Class1.cs 文件。
分析项目的代码缺陷
在“解决方案资源管理器”中选择 CodeAnalysisManagedDemo。
在 “项目” 菜单上,单击 “属性” 。
CodeAnalysisManagedDemo 属性页将显示。
选择“代码分析”选项卡。
确保在“二进制分析器”部分中选中“生成时运行” 。
在“活动规则”下拉列表中,选择“Microsoft 所有规则”。
在“文件”菜单上,单击“保存选定项”,然后关闭属性页 。
在“生成”菜单中,单击“生成 CodeAnalysisManagedDemo” 。
CodeAnalysisManagedDemo 项目生成警告将显示在“错误列表”和“输出”窗口中 。
更正代码分析问题
在“视图”菜单上,选择“错误列表” 。
根据你选择的开发人员配置文件,你需要指向“视图”菜单上的“其他窗口”,然后选择“错误列表” 。
在“解决方案资源管理器”中,选择“显示所有文件”。
展开“属性”节点,然后打开“AssemblyInfo.cs”文件。
使用以下提示更正警告:
CA1014:使用 CLSCompliantAttribute 标记程序集:将代码
[assembly: CLSCompliant(true)]
添加到 AssemblyInfo.cs 文件的末尾。CA1032:实现标准异常构造函数:将构造函数
public demo (String s) : base(s) { }
添加到类demo
。CA1032:实现标准异常构造函数:将构造函数
public demo (String s, Exception e) : base(s, e) { }
添加到类demo
。CA1032:实现标准异常构造函数:将构造函数
protected demo (SerializationInfo info, StreamingContext context) : base(info, context) { }
添加到类 demo。 还需要为 System.Runtime.Serialization 添加using
语句。CA1032:实现标准异常构造函数:将构造函数
public demo () : base() { }
添加到类demo
。CA1709:标识符应正确大小写:将命名空间的大小写
testCode
更改为TestCode
。CA1709:标识符应正确大小写:将成员名称更改为
Demo
。CA1709:标识符应正确大小写:将成员名称更改为
Item
。CA1710:标识符应具有正确的后缀:将类及其构造函数的名称更改为
DemoException
。CA2237:使用 SerializableAttribute 标记 ISerializable 类型:将
[Serializable ()]
特性添加到类demo
。CA2210:程序集应具有有效的强名称:使用强名称密钥对“CodeAnalysisManagedDemo”进行签名:
在“项目”菜单上,选择“CodeAnalysisManagedDemo 属性” 。
随即显示项目属性。
选择 “签名” 选项卡。
选择“为程序集签名”复选框。
在“选择字符串名称密钥文件”列表中,选择“<新建>”。
“创建强名称密钥”对话框随即出现。
在“密钥文件名”处,输入“TestKey” 。
输入密码,然后选择“确定”。
在“文件”菜单上,选择“保存选定项”,然后关闭属性页 。
在完成所有更改后,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; } } } }
重新生成项目。
排除代码分析警告
对于每一个剩余警告,请执行以下操作:
在“错误列表”中选择警告。
从右键菜单(上下文菜单)中,选择“禁止显示”>“在禁止显示文件中” 。
重新生成项目。
项目生成时没有任何警告或错误。
相关内容
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈