.NET 开源时间还不长,因为一直在做 YOYOFx 的关系,所似我常常有更深入的了解. NET Core 和 ASP.NET Core 内容的需求,并且. NET Core 平台与之前版本的变化太大,这也导致我经常要去查看源代码中,来了解 ASP.NET Core 和. NET Core 代码实现。
的确,.NET Core 和 ASP.NET Core 的源代码,现在已经在 Github 上进行了代码托管;但不管是在 Github 上在线阅读或是将源代码 Clone 到本地阅读,都比较有局限性,我最想要的还是能通过调试的方法,单步的对程序进行 DEBUG 调试断点到源代码中。
我写这篇文章的目地也是描述一下,如何调试. NET Core 源代码的步骤,我总结了两种对. NET Core 源代码的方法。
以前微软给我们调试. NET 程序的方法,通常是在 Visual Studio 加入符号服务器,来调试. NET 托管程序。我们这次使用同样的方法,来完成这个调试源代码的任务。
首先. NET Core 的符号服务器地址: ,关于这个符号服务器地址是怎么找到的,还是去 MyGet 上去多溜溜,发现肯定会不少。
我们这次使用 Visual Studio 2015 Update3,来完成以下操作:
在 VS2015 的 Tools -> Options -> Debugging ->Symbols 中,添加符号服务器地址: ,然后最好清一下符号文件的缓存。
Tools -> Options -> Debugging ->Symbols -> General 中,勾选 Enable .NET Framework source stepping 和 Enable source server support 两个选项。
现在就可以进行单步调试进. NET Core 的源代码中了,只是第一次 DEBUG 加载的时候,会非常的慢,符号服务器在国外嘛,真的是比较慢,而且不会一次性全部下载并加载进来,可能在调试到某些断点时,还要进行符号文件的下载,不过这种方法,也有好的一面,比如所有代码都能看到源代和调试了包括. NET Core 的 Fx。
第二种方式,是通过将源代码加入到项目中以达到代码调试的能力。这次以 ASP.NET Core 的源代码为例,同学们可以举一反三,这次使用的环境为. NET Core 1.0.1,当然 ASP.NET Core MVC 项目的版本也要与之对应。
我们先 Clone 一份 ASPNETCore.MVC 的源代码到本地,因为我们这次使用的版本是 1.0.1 所以 Clone 后查看下包括的版本信息。
- D: \Projects\AspNet\Mvc[master≡] > git tag 1.0.0 1.0.0 - rc2 1.0.1 6.0.0 - alpha2 6.0.0 - alpha3 6.0.0 - alpha4 6.0.0 - beta1 6.0.0 - beta2 6.0.0 - beta3 6.0.0 - beta4 6.0.0 - beta5 6.0.0 - beta6 6.0.0 - beta7 6.0.0 - beta8 6.0.0 - rc1 rel / 1.0.1 D: \Projects\AspNet\Mvc[master≡] >
我们需要的版本为 rel/1.0.1,如果 Clone 的版本不正确也可以 git checkout 1.0.1 下。
接下来,我们要修改项目根目录中的 global.json 文件:
- {
- "projects": ["src", "test", "D:\\Projects\\AspNet\\Mvc\\src"],
- "sdk": {
- "version": "1.0.0-preview2-003131"
- }
- }
在文件加入 Clone 下来的 ASPNETCore 源代码的路径。当然这里要注意,VS2015 里创建项目模板可能会有版本问题,SDK 使用的是 1.0.0-preview2-003131 版本,还有 project.json 里的程序集版本也要与源代码提供的版本保持一致!完成这个步骤后我们等待一会,整个项目就是重新来还原包信息和编译。
当然还是会出现一些小问题,比如项目编译时会找不到 AspNetCore 项目编译出来的 DLL 文件,这是因为如果 Clone 下来的源代码与你的项目不在一个目录下的话,会导致找不到编译出来的程序集,解决方法也很简单,修改下编译参数,我的做法是修改. xproj 的方法。
将下载的 ASP.NET Core 的源代码中的项目文件 *.xproj 依次打开找到如下行:
- <OutputPath Condition="'$(OutputPath)'=='' ">
- ..\..\artifacts\bin\
- </OutputPath>
将其修改为:
- <OutputPath Condition="'$(OutputPath)'=='' ">
- .\bin\
- </OutputPath>
好了经过以上的步骤,现在再编译就可以通过了,接下来,下断点吧。 以上的两种方法都可以举一反三,找到符号文件或编译源代码加入项目目录,都可以编译调试任何. NET Core 开源代码。
GitHub: 如果觉还可以请 Star 下, 欢迎一起交流。
.NET Core 和 YOYOFx 的交流群:
如果你觉得本文对你有帮助,请点击 "",谢谢.
来源: http://www.cnblogs.com/maxzhang1985/p/6015719.html