使用.net 中的动态方法编程备忘录1(如何查看生成的动态方法的代码)

来源:互联网 发布:手机淘宝如何删除评论 编辑:程序博客网 时间:2024/06/06 01:10

    使用动态方法编程,常常不知生成的动态方法是否正确,这里介绍,使用工具软件查看动态生成的代码的方法。

 

    1、下载并安装可反编译.net程序的工具

 

    我一直用Reflector.exe来反编译和查看exe、dll文件的代码,Reflector.exe 有免费版本,足够使用了。首先,要下载Reflector.exe,只要在搜索引擎搜一下,很容易得到这个软件的下载链接。

   

    2、将发出的动态方法保存到.dll文件

 

    正常情况下,动态方法或动态类、动态生成的程序集并不需要保存,而为了反编译和查看其代码,就必须将之保存为磁盘文件,

    要保存动为磁盘文件,无论你原来程序中只是使用动态方法,还是使用动态类,即便本来没有动态生成的程序集,也必须通过动态程序集保存。

    我的做法,是另建立一个专门测试的项目,有时也需要在原来程序中添加相应测试方法,使用  System.Reflection.Emit.AssemblyBuilder 及 ModuleBuilder、TypeBuilder 等,创建一个 TypeBuilder(如原程序本来有则无需创建,如无则需要创建),在TypeBuilder中,定义动态方法,并执行原程序中本来的 方法,最终,通过 AssemblyBuilder来保存。

    示例:

    运行程序,执行发出动态方法的代码,会保存为一个磁盘文件。

    好像是,保存时,只能保存在测试程序的 exe所在目录,所以保存时,无需有前缀路径,只要有文件名即可。

    一旦正确执行并保存后,即可直接在资源管理器中的右键菜单中,以Reflector.exe 打开此dll。

    Reflector.exe打开后,会显示一个树状的程序集列表,点开你动态生成的程序集,向下逐步打开模块、类、类成员,双击类成员即可右侧窗格中显示该成员代码。

    Reflector.exe中查看代码时,可选择查看 IL(微软中间语言)代码、C#代码、C++代码、VB代码等等。

    IL代码是肯定可以看到的,而其他高级语言代码,有可能看不到,如果看不到,则有可能是Reflector.exe无法将之反编译成高级代码,这极有可能是你在发出动态代码时有错误,此时你可仔细查看 IL 代码,分析错误之处。