Debugging into .NET Core源代码的两种方式
来源:互联网 发布:php ecshop二次开发 编辑:程序博客网 时间:2024/06/05 21:50
一、前言
.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后查看下包括的版本信息。
我们需要的版本为rel/1.0.1,如果Clone的版本不正确也可以git checkout 1.0.1下。
2.修改global.json
接下来,我们要修改项目根目录中的global.json文件:
在文件加入Clone下来的ASPNETCore源代码的路径。当然这里要注意,VS2015里创建项目模板可能会有版本问题,SDK使用的是1.0.0-preview2-003131版本,还有project.json里的程序集版本也要与源代码提供的版本保持一致!完成这个步骤后我们等待一会,整个项目就是重新来还原包信息和编译。
当然还是会出现一些小问题,比如项目编译时会找不到AspNetCore项目编译出来的DLL文件,这是因为如果Clone下来的源代码与你的项目不在一个目录下的话,会导致找不到编译出来的程序集,解决方法也很简单,修改下编译参数,我的做法是修改.xproj的方法。
将下载的ASP.NET Core的源代码中的项目文件 *.xproj 依次打开找到如下行:
将其修改为:
四、写在最后
好了经过以上的步骤,现在再编译就可以通过了,接下来,下断点吧。 以上的两种方法都可以举一反三,找到符号文件或编译源代码加入项目目录,都可以编译调试任何.NET Core开源代码。
原文地址:http://www.cnblogs.com/maxzhang1985/p/6015719.html
.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
- Debugging into .NET Core源代码的两种方式
- .NET连接SQLExpress的两种方式
- .NET的两种反射方式
- .net 连接oracle的两种方式
- 【Android】Android 彩信发送的两种方式+源代码
- oracle的select into和冒号等于的两种赋值方式
- ASP.NET Core 十种方式扩展你的 Views
- ASP.NET Core 十种方式扩展你的 Views
- SourceSafe两种源代码管理方式
- SourceSafe两种源代码管理方式
- MySql insert into 的两种语法
- asp.net中读取数据库的两种方式
- asp.net中读取数据库的两种方式
- ASP.NET GDI+输出的两种方式
- .net 中访问 excel文件的两种方式
- asp.net中读取数据库的两种方式
- asp.net读取数据库的两种方式
- asp.net中读取数据库的两种方式
- IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API
- [公测]微信小程序设计指南文档
- 阅读《A Survey of Monocular Simultaneous Localization and Mapping》
- .NET Core 使用 grpc 实现微服务
- 使用 dotnet watch 开发 ASP.NET Core 应用程序
- Debugging into .NET Core源代码的两种方式
- Google发布用于Google Cloud的.Net API
- 使用 JavaScriptService 在.NET Core 里实现DES加密算法
- 以ABP为基础架构的一个中等规模的OA开发日志
- ASP.NET Core loves JavaScript
- 跨平台的 NodeJS 组件解决 .NetCore 不支持 System.Drawing图形功能的若干问题
- ASP.NET CORE 项目实战 ---图形验证码的实现
- Java 微信公众号开发(一) 介入微信
- .Net Core上用于代替System.Drawing的类库