今天准备通过调试ASP.NET MVC源码看看MVC的运行机制,没想到碰到点儿问题,用了点时间把问题解决了,顺便记录一下进行调试的整个过程,希望对碰到同样问题的同学有些帮助。
1.首先下载ASP.NET MVC的源代码,下载地址http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=22079。
2.下载解压后,用VS打开ASP.NET MVC框架的解决方案,如下图:
然后打开AssemblyInfo.cs文件,将其中的 [assembly: AssemblyVersion("2.0.0.0")] 改为 [assembly: AssemblyVersion("2.0.0.1")] ,选择生成类型为Debug,生成解决方案。
3.任意新建一个ASP.NET MVC项目(我用的名称是MvcApplication1),移除System.Web.Mvc的引用。将在第二步由ASP.NET MVC源码生成的System.Web.Mvc.dll复制到MvcApplication1项目中的任一位置(可以在项目根目录中新建一个REFERENCE文件夹,然后将DLL复制到些文件夹下,方便管理),在MvcApplication1添加对该System.Web.Mvc.dll的引用。
4.打开MvcApplication1根目下的Web.Config,找到与System.Web.Mvc DLL配置相关的的配置项做如下更改:
打开Views目录下的Web.Config文件,更改如下配置项:
5.生成并启动MvcApplication1项目,然后确保此时MvcApplication1不处于调试状态(使用调试启动项目后,停止MvcApplication1的调试,这时我们可以直接通过URL进行访问)。转到打开ASP.NET MVC项目的VS,点击菜单项 调试->附加到进程,在弹出的进程选择框中选择MvcApplicatioin1启动的WebDev进程,点击确定附加进程。在ASP.NET MVC项目中的MvcHandler.cs文件中找到BeginProcessRequest方法,并在方法开始位置打上断点,然后再访问MvcApplication1的页面时,该断点会被激活,此时我们就可以使用F11进行单布调试ASP.NET MVC基础框架了,如下图: