使用Mono.Cecil读写.NET程序集
发表于2008年12月10日使用Reflexil修改.NET程序集
http://www.codeproject.com/KB/msil/reflexil.aspx
基于Cecil的项目合集
http://groups.google.com/group/mono-cecil/web/projects-using-cecil
DimeCast上一个视频演示通过Cecil向程序集中注入代码。 MSDN关于IL指令的文档。
使用Reflexil修改.NET程序集
http://www.codeproject.com/KB/msil/reflexil.aspx
基于Cecil的项目合集
http://groups.google.com/group/mono-cecil/web/projects-using-cecil
DimeCast上一个视频演示通过Cecil向程序集中注入代码。 MSDN关于IL指令的文档。
与Cecil类似的项目:
System.Reflection – .NET内置的反射工具
Zonnon – A language and compiler experiment
CCI(Common Compiler Infrastructure) – 没有太多信息。
Java平台有著名的工具ASM,详见其开发者文档。ASM对操作Generic Collection也有很好的实现。
有幸在上周五六参加Apache Meetup和Barcamp活动中遇到了Novell公司的Alex Lau。期间他提到了Mono Accecibility这个项目。我在构建NTE时用到了Mono Cecil来读取ECMA IL格式的指令,所以对Mono的相关项目颇有好感。
所以再次罗列一下网站资源:
如果有机会应该参与一些Mono相关的工作。Google也参与了Mono相关的项目。
在负责一个Unit Testing on CAB的内部培训项目期间,我阅读了Miško Hevery的一系列文章,他目前在Google担任敏捷教练。我对他的Testability Explorer(简称GTE) 产生了浓厚兴趣。
虽然Java和.Net世界已经有一些类似工具存在,但GTE这个项目实现功能比较专一,输出结果也直接易懂。相对NDepend强大但相对复杂和FxCop官方但略显强硬,GTE这个项目从形式上来说更有亲和力。所以我和Joe同学在Google Code上开始了一个新项目: .NET Testability Explorer(简称NTE)。
功能受众是期望对输出的.NET Assembly进行分析的开发人员,报告中提供的信息可以帮助他们对设计进行调整,从而使code base更容易测试和维护。
计划是,首先实现圈复杂度的度量,然后实现输出类似GTE形式的报告。希望能够在09年农历新年前发出第一个版本。
目前TE的成本模型支持对全复杂度、全局变量和笛米特法则的计算。
技术层面可以参考Gendarme这个项目,一个基于Mono.Cecil的代码分析工具。
Updates 20081221
项目分成两部分:IL分析,基于规则的成本模型计算
IL分析:目前IL分析方面的技术调研实现了类型,字段,方法级别的读取。剩下最大的一部分是方法中instruction的decompose,这部分估计占全部的40%工作量。但是我需要从成本模型分析的方向进行分析,确定在decompose过程中所需要收集的信息,所以先完成大概10%遍历所有instruction构建一个草图模型。目标是实现最简单的圈复杂度的计算。
成本模型:完成大概10%-20%的基础模型构建,支持全复杂度的计算。
下一步,重构设计使其能支持更多的规则考量,并增强其可扩展性。
目前从代码量来看完成了TE全部功能的1/6,考虑到TE支持对C++语言的分析,折半其工作量,目前大概完成了全部工作的1/3。
目标定于在完成一半的时候提交代码到Google Code,并发布第一个可运行的版本。时间定于08年圣诞节期间。新的计划是春节之前,发布第一个可运行的版本,并将代码提交。