C#特性Attribute的实际应用之:代码统计分析

简介:

日常工作中,需要为程序集提供统计分析:

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。分别如下:

 

复制代码
代码
 
  
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false )]
public class CreaterAttribute : Attribute
{
public CreaterAttribute( string creater, string createDate)
{
Creater
= creater;
CreateDate
= createDate;
}
public string Creater { get ; private set ; }
public string CreateDate { get ; private set ; }
}

[AttributeUsage(AttributeTargets.Class
| AttributeTargets.Method, AllowMultiple = true )]
public class ReviewerAttribute : Attribute
{
public ReviewerAttribute( string reviewer, string reviewDate)
{
Reviewer
= reviewer;
ReviewDate
= reviewDate;
}
public string Reviewer { get ; private set ; }
public string ReviewDate { get ; private set ; }
}

[AttributeUsage(AttributeTargets.Method, AllowMultiple
= false )]
public class BugAttribute : Attribute
{
public BugAttribute( bool isBug, string bugDate)
{
this .IsBug = isBug;
this .BugDate = bugDate;
}
public bool IsBug { get ; private set ; }
public string BugDate { get ; private set ; }
}
复制代码

       

3:引用XP.AttributeClass

在我们自己的程序集中,需要为自己的类或方法加上这类特性,参考如下:

 

复制代码
代码
 
  
[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://www.cnblogs.com/luminji/archive/2010/12/29/1920452.html,如需转载请自行联系原作者

相关文章
|
1天前
|
存储 C# 开发者
枚举与结构体的应用:C#中的数据组织艺术
在C#编程中,枚举(`enum`)和结构体(`struct`)是非常重要的数据类型。枚举用于定义命名常量集合,提高代码可读性;结构体则封装相关数据字段,适合小型数据集。本文从基本概念入手,探讨它们的使用技巧、常见问题及解决方案,帮助开发者更好地利用这些特性构建健壮的应用程序。
17 8
|
13天前
|
C#
C# 一分钟浅谈:循环结构 for 和 while 的应用
【9月更文挑战第1天】循环结构是编程中的基础概念,C# 中常用的 `for` 和 `while` 循环允许重复执行代码直至满足特定条件。`for` 循环基于计数,适用于已知循环次数的情况;`while` 循环基于条件,适用于未知循环次数的情况;`do-while` 循环则至少执行一次循环体。本文详细介绍了这些循环的语法和示例,并探讨了常见问题及其解决方法,如循环条件和更新表达式的错误设置。通过综合应用示例(如计算阶乘和斐波那契数列),帮助读者更好地理解和掌握循环结构的使用方法。正确使用循环可以提高程序的效率和可读性。
29 2
|
13天前
|
开发者 C# Android开发
Xamarin 与 .NET:解锁现代化移动应用开发的超级武器——深入探讨C#与.NET框架如何赋能跨平台应用,实现高效编码与卓越性能
【8月更文挑战第31天】Xamarin 与 .NET 的结合为开发者提供了强大的平台,用于构建现代化移动应用。通过 C# 和 .NET 框架,Xamarin 可以实现一次编写、多平台运行,覆盖 iOS、Android 和 Windows。这种方式不仅节省了开发时间和成本,还保证了应用的一致性和高质量。Xamarin 是一个开源框架,专为跨平台移动应用开发设计,允许使用 C# 语言和 .NET 核心库构建原生应用,并访问各平台特定功能。微软维护的 Xamarin 是 Visual Studio 生态系统的一部分,极大地提高了开发效率。
40 0
|
13天前
|
数据安全/隐私保护 C# UED
利用 Xamarin 开展企业级移动应用开发:从用户登录到客户管理,全面演示C#与Xamarin.Forms构建跨平台CRM应用的实战技巧与代码示例
【8月更文挑战第31天】利用 Xamarin 进行企业级移动应用开发能显著提升效率并确保高质量和高性能。Xamarin 的跨平台特性使得开发者可以通过单一的 C# 代码库构建 iOS、Android 和 Windows 应用,帮助企业快速推出产品并保持一致的用户体验。本文通过一个简单的 CRM 示例应用演示 Xamarin 的使用方法,并提供了具体的代码示例。该应用包括用户登录、客户列表显示和添加新客户等功能。此外,还介绍了如何增强应用的安全性、数据持久化、性能优化及可扩展性,从而构建出功能全面且体验良好的移动应用。
22 0
|
13天前
|
开发者 C# C++
揭秘:如何轻松驾驭Uno Platform,用C#和XAML打造跨平台神器——一步步打造你的高性能WebAssembly应用!
【8月更文挑战第31天】Uno Platform 是一个跨平台应用程序框架,支持使用 C# 和 XAML 创建多平台应用,包括 Web。通过编译为 WebAssembly,Uno Platform 可实现在 Web 上运行高性能、接近原生体验的应用。本文介绍如何构建高效的 WebAssembly 应用:首先确保安装最新版本的 Visual Studio 或 VS Code 并配置 Uno Platform 开发环境;接着创建新的 Uno Platform 项目;然后通过安装工具链并使用 Uno WebAssembly CLI 编译应用;最后添加示例代码并测试应用。
33 0
|
25天前
|
C# 索引
C#各大版本特性
C#各大版本特性
53 0
|
4月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
159 3
|
4月前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
177 3
|
3天前
|
安全 程序员 编译器
C#一分钟浅谈:泛型编程基础
在现代软件开发中,泛型编程是一项关键技能,它使开发者能够编写类型安全且可重用的代码。C# 自 2.0 版本起支持泛型编程,本文将从基础概念入手,逐步深入探讨 C# 中的泛型,并通过具体实例帮助理解常见问题及其解决方法。泛型通过类型参数替代具体类型,提高了代码复用性和类型安全性,减少了运行时性能开销。文章详细介绍了如何定义泛型类和方法,并讨论了常见的易错点及解决方案,帮助读者更好地掌握这一技术。
18 11