Reflector是.NET开发中必备的反编译工具。即便没有用在反编译领域,也经常用它来检查程序集的命名规范,命名空间是否合理,组织类型的方法是否须要改善。举例说明,它有一个能够查看程序集完整名称的功能,请看下图html
这里的Name,是标识一个程序集的完整标识,当GAC中存在程序集的多个版本时,这个名称是惟一的识别名称。app
可是,Reflector很早就转向收费软件了,须要购买许可才可使用。对于耻于用盗版的朋友,一般会放弃。有朋友说,Reflector并无增长更霸道的功能,却转向收费,使人费解。再看看市场上的.NET反编译软件,被Reflector击溃。框架
一提到Reflector,说到.NET反编译,Reflector经常是默认的首选工具。工具
这里提起一下Visual Studio的垄断。Visual Studio占据了.NET开发工具系列的绝对垄断地位。在.NET 1.x时代,还有C# Builder,Delphi.NET来使用和体验,一争高低。但是到后来,.NET Framwork更新频繁,动辙在编译器级别,和语言层面作更新,这令第三方的软件开发工具商很是苦恼,这些工具也从市场上慢慢消声匿迹,几乎没有第三方的软件开发商愿意开发.NET开发工具与Visual Studio一争高低。没有了竞争,进步的速度要慢不少。Visual Studio 2008差很少就是Visual Studio 2005+SP的替代品,在工具层面,Visual Studio 2005 SP1加上了Web Application,就是Visual Studio 2008。虽说语言层面是进步了不少,.NET 3.0,.NET 3.5,LINQ, 框架方法增长:WCF,WPF,WF,可是,我一直认识从2005到2008,它在工具层面没有什么进步。
SharpDevelop 是除Visual Studio外,另外一个可选择的惟一的.NET开放工具,而且它是开源的。它提供的功能也至关不错,几乎就是在重写Visual Studio。最新的版本中,直接增长了对Visual Studio的解决方安案文件和项目文件的支持。ILSpy是SharpDevelop小组的反编译工具,也是开放源代码的,今天来介绍一下它的调试器和反编译器,以让那个收费的,却没有增长霸道功能的Reflector out。学习
ILSpy的界面与Reflector类似,左边以树型控件显示程序集和它的类型,右边是对应的源代码。基础的反编译功能,与Reflector相比,丝绝不差,甚至有时候用Reflector没法反编译(由于加密)的程序集,用ILSpy能够反编译。 开发工具
基础的类型反编译功能都具有,如今只支持把源代码反编译为C#和IL语言,不支持VB。优化
当须要找的程序集是.NET框架时,能够直接从菜单File—Open from GAC中打开须要查看源码的程序集。ui
代码保存功能也作得不错,当点击一个类型时,选择File->Save Code会反编译当前的类型并保存到指定的文件中,当选择程序集时,Save Code保存为一个项目(csproj)文件,而且把它全部的类型加到这个项目中。加密
这里要说的调试器,不是指Visual Studio的源码级别的调试器,而是指程序集的调试器。Reflector有个Addin,能够直接附加在Visual Studio中,调试第三方的类型库,而不须要把第三方的类型库反编译后,以源码的形式添加到项目中。.net
ILSpy也有这个功能,直接对第三方的程序集进行调试,有两种选项
若是第三方类型库是可执行程序(EXE),能够用Debug an executable来启动这个程序。
若是第三方类型库是程序集(DLL),能够用Attach to running application来附加,以启动程序集的调试。
从上面两张图中已经能够看出它的用法,和调试源代码同样。在须要监视变量值的方法的地方,设置断点,当程序运行到此时,就能够经过监视窗体来观察变量的值。从ILSpy的状态栏中看出,上面的第一张图是正处于调试状态,第二张图,是准备就绪,能够进行调试。
这二者的区别是,Attach to a running application调试时,若是代码通过编译器优化,则监视器会没法获得它的值。
如图所示,没法显示正在调试的变量num的值,由于代码已经通过优化。官方推荐的方式是Debug an executable
与在Visual Studio中调试.NET源代码同样,你能够Step into,Step over,continue,同时状态栏会显示就绪(stand by),运行中(running),正在调试(debugging)。
除了调试程序集的C#/VB形式的代码以外,也能够以IL代码形式调试,以下图所示
由此看来,这仍是至关不错的调试IL代码的工具。工具能够促进学习的效果,学习领悟以后,又能够推动工具的发展,这就是知识的无止境的发展。
ILSpy的debugger是以插件形式存在的,请确保包含ILSpy.Debugger的Plugin。
根据咱们的理解,调试.NET程序集必定须要PDB文件才能够。然而ILSpy却没有产生PDB文件(no PDB files are generated),并且它不能够调试ASP.NET Web application和Web 服务。
这其中的原理,不甚明白。compiler/debugger一直是我喜好的技术主题,但学识肤浅,没法分享。
Reflector会检测到系统时间超过了它预设的时间,若是不升级,它会主动删除本身,从你的电脑中out掉。若是你对此很烦恼,那就让它out吧,你能够有另外一个选择,试试ILSpy,或许会带来一丝的惊喜。
转自
http://www.cnblogs.com/JamesLi2015/archive/2011/09/08/2170519.html#3406308