一起谈.NET技术,C#特性Attribute的实际应用之:代码统计分析
2011-09-02 00:19
801 查看
日常工作中,需要为程序集提供统计分析:
1:程序集方法数;
2:开发人员数目及各自所开发或REVIEW的方法数;
3:测试中,被标注有BUG的数目;
4:直接查看方法的IL代码;
鉴于以上统计的需要,特开发本EXE。
它跟注释的区别是:注释是对程序源代码的一种说明,主要目的是给人看的,在程序被编译的时候会被编译器所丢弃,因此,它丝毫不会影响到程序的执行。而Attribute是程序代码的一部分,不但不会被编译器丢弃,而且还会被编译器编译进程序集(Assembly)的元数据(Metadata)里,在程序运行的时候,你随时可以从元数据里提取出这些附加信息来决策程序的运行。
本文所依据的就是特性这个特点。
代码
备注:从项目管理的角度来说,本报表,仅仅是对工作量和代码质量的一个辅助参考,但有此参考,会比没有好。
1:首先,本分析工具是对程序集进行分析。所谓程序集,就是编译为IL代码的托管代码;
2:理论上,从IL代码能反编译为托管代码(就像Reflactor一样),但是,太复杂了,我们没有去实现;
3:即使反编译IL代码,得到的也不是原始的代码。如果要分析原始代码的,可以采用其它现成工具。
所以,既然我们统计的是IL代码,所以,本工具的一个辅助功能就是IL代码的查看。本工具主页面:
源码下载地址:
http://download.csdn.net/source/2946944
1:程序集方法数;
2:开发人员数目及各自所开发或REVIEW的方法数;
3:测试中,被标注有BUG的数目;
4:直接查看方法的IL代码;
鉴于以上统计的需要,特开发本EXE。
1:关于特性Attribute的知识补充
"Attribute是一种可由用户自由定义的修饰符(Modifier),可以用来修饰各种需要被修饰的目标"。它的作用是为它们的修饰目标追加上一些额外的信息——比如"这个类是我写的"或者"这个函数以前出过问题"等等。它跟注释的区别是:注释是对程序源代码的一种说明,主要目的是给人看的,在程序被编译的时候会被编译器所丢弃,因此,它丝毫不会影响到程序的执行。而Attribute是程序代码的一部分,不但不会被编译器丢弃,而且还会被编译器编译进程序集(Assembly)的元数据(Metadata)里,在程序运行的时候,你随时可以从元数据里提取出这些附加信息来决策程序的运行。
本文所依据的就是特性这个特点。
2:基础模块XP.AttributeClass
根据文章开头的要求:统计开发者、reviewer、bug信息,需要创建一个可被客户端项目引用的类库项目XP.AttributeClass。该项目包含三个Attribute类:CreaterAttribute、ReviewerAttribute、BugAttribute。分别如下:代码
[CreaterAttribute("join", "2010年12月14日")] class class1 { [CreaterAttribute("join", "2010年12月14日")] [BugAttribute(true, "2010年12月14日")] [ReviewerAttribute("hy", "2010年12月14日")] private void Test1() { } [ReviewerAttribute("hy", "2010年12月14日")] public void Test2() { } public void Test3() { } }
4:统计分析模块XP.CodeStatistics
XP.CodeStatistics是本工具的核心模块,包括了四个功能:获取程序集、获取IL代码、统计分析。核心类如下,本文不再赘述,请直接查看源码。5:生成报表
由于对客户端程序集添加了如上的特性信息的,所以,通过分析程序集,我们可以很方法得到如下的报表:备注:从项目管理的角度来说,本报表,仅仅是对工作量和代码质量的一个辅助参考,但有此参考,会比没有好。
6:IL代码查看
细心的人,可能已经发现,上表所统计的仅仅是IL的代码行数,而不是实际代码行数。这是因为:1:首先,本分析工具是对程序集进行分析。所谓程序集,就是编译为IL代码的托管代码;
2:理论上,从IL代码能反编译为托管代码(就像Reflactor一样),但是,太复杂了,我们没有去实现;
3:即使反编译IL代码,得到的也不是原始的代码。如果要分析原始代码的,可以采用其它现成工具。
所以,既然我们统计的是IL代码,所以,本工具的一个辅助功能就是IL代码的查看。本工具主页面:
源码下载地址:
http://download.csdn.net/source/2946944
相关文章推荐
- C#特性Attribute实际应用:代码统计分析
- C#特性Attribute的“.NET研究”实际应用之:代码统计分析
- 一起谈.NET技术,关于C# 中的Attribute 特性
- 一起谈.NET技术,写出优雅简明代码的论题集 -- Csharp(C#)篇[1]
- 一起谈.NET技术,浅谈思路严谨的用户在线状态控制【附部分C#参考代码】
- 一起谈.NET技术,【经验总结】C#常用线程同步方法应用场景和实现原理
- 一起谈.NET技术,C# 4动态编程新特性与DLR剖析
- 一起谈.NET技术,C# 枚举在项目中的应用总结
- 一起谈.NET技术,案例分析:Silverlight在中国人寿的应用
- 一起谈.NET技术,基于Visual Studio 2010 阐述C#4个特性
- 一起谈.NET技术,改善代码设计 —— 优化物件之间的特性(Moving Features Between Objects)
- 【转】一起谈.NET技术,关于c#静态方法和实例方法的辨析和应用
- 一起谈.NET技术,C#中的语言特性都是从何而来?
- C#特性Attribute的实际应用之:代码统计分析
- C#特性Attribute的实际应用之:代码统计分析【转】
- 一起谈.NET技术,谈谈C# 4.0新特性“缺省参数”的实现
- 一起谈.NET技术,关于c#静态方法和实例方法的辨析和应用
- 一起谈.NET技术,使用VS2010代码分析功能增强ASP.NET应用程序安全
- 一起谈.NET技术,写出优雅简明代码的论题集 -- Csharp(C#)篇[2]
- C#特性Attribute的实际应用之:代码统计分析