一、前言

  .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的符号服务器地址:https://dotnet.myget.org/F/dotnet-core/symbols/ ,关于这个符号服务器地址是怎么找到的,还是去MyGet上去多溜溜,发现肯定会不少。

  我们这次使用Visual Studio 2015 Update3,来完成以下操作:

  1.设置符号服务器

  在VS2015的Tools -> Options -> Debugging ->Symbols中,添加符号服务器地址:https://dotnet.myget.org/F/dotnet-core/symbols/ ,然后最好清一下符号文件的缓存。

  2.设置VS2015支持调试进框架源代码

  Tools -> Options -> Debugging ->Symbols -> General中,勾选Enable .NET Framework source stepping和Enable source server support 两个选项。

  现在就可以进行单步调试进.NET Core的源代码中了,只是第一次DEBUG加载的时候,会非常的慢,符号服务器在国外嘛,真的是比较慢,而且不会一次性全部下载并加载进来,可能在调试到某些断点时,还要进行符号文件的下载,不过这种方法,也有好的一面,比如所有代码都能看到源代和调试了包括.NET Core的Fx。

三、项目中添加ASP.NET Core源代码

  第二种方式,是通过将源代码加入到项目中以达到代码调试的能力。这次以ASP.NET Core的源代码为例,同学们可以举一反三,这次使用的环境为.NET Core 1.0.1,当然ASP.NET Core MVC项目的版本也要与之对应。

  1.Clone源代码

  我们先Clone一份ASPNETCore.MVC的源代码到本地,因为我们这次使用的版本是1.0.1所以Clone后查看下包括的版本信息。

D:\Projects\AspNet\Mvc [master ≡]> git tag
1.0.
1.0.-rc2
1.0.
6.0.-alpha2
6.0.-alpha3
6.0.-alpha4
6.0.-beta1
6.0.-beta2
6.0.-beta3
6.0.-beta4
6.0.-beta5
6.0.-beta6
6.0.-beta7
6.0.-beta8
6.0.-rc1
rel/1.0.
D:\Projects\AspNet\Mvc [master ≡]>

  我们需要的版本为rel/1.0.1,如果Clone的版本不正确也可以git checkout 1.0.1下。

  2.修改global.json

  接下来,我们要修改项目根目录中的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:https://github.com/maxzhang1985/YOYOFx  如果觉还可以请Star下, 欢迎一起交流。

.NET Core 和 YOYOFx 的交流群: 214741894

如果你觉得本文对你有帮助,请点击“推荐”,谢谢.

  

  

最新文章

  1. 常见bug及解决方案
  2. php数组合并&amp;去重&amp;恢复索引demo
  3. 构建winform控件数据缓存器
  4. WIN7、WIN8 右键在目录当前打开命令行Cmd窗口(图文)
  5. 【jquery】Validform,一款不错的 jquery 表单验证插件
  6. Action类为何要 extends ActionSupport
  7. 数字证书私钥sign及验证
  8. 检测到在集成的托管管道模式下不适用的 ASP.NET 设置的解决方法
  9. UITableView中的(NSIndexPath *)indexPath
  10. 一个a::before的写法
  11. 对JVM运行时常量池的一些理解
  12. 201521123033《Java程序设计》第7周学习总结
  13. static关键字的使用总结
  14. 安装和配置hive
  15. 从线程模型的角度看Netty的高性能
  16. device-pixel-radio
  17. .Net 泛型约束
  18. dede5.7 GBK 在php5.4环境下 后台编辑器无法显示文章内容
  19. 记一次web服务模块开发过程
  20. 20165322 预备作业3 Linux安装及学习

热门文章

  1. 4.Powershell交互界面
  2. 倒计时的js实现 倒计时 js Jquery
  3. ubuntu1404安装搜狗输入法后出现黑框的问题
  4. HDFS 异常处理与恢复
  5. Java NIO6:选择器2---代码篇
  6. spring事务管理器设计思想(一)
  7. Visual Studio Code + live-server编辑和浏览HTML网页
  8. Hystrix框架4--circuit
  9. MongoDB学习笔记~根据子集合里某个属性排序
  10. [大数据之Sqoop] —— Sqoop初探