像JAVA一样流畅调试C#源代码?

起因

最近在研究ServiceScope的内一些内在运行逻辑,发现相关资料非常少,只有讲IOC相关的文章有说Core时代的官方依赖注入怎么使用。。遂决定还是要去看源代码。这部分源代码在Microsoft.Extensions.DependencyInjection库中,源代码位置在src/libraries[1]下。阅读了一点,发现内部解析服务的时候会来回倒腾,那看代码的方式去梳理就非常难受了。。

有没有一种可能, C#也能像JAVA那样非常顺畅的调试源代码呢?

效果

还真有! 话不说多,看图:

d1f56787ce2c3371860b8de462f492d9.png7cd18db4a253833ac016b03ef37e6193.png

速度非常快,像调试本地代码一样.. 比反编译出来的流畅度不知道高到那里去了!

不知道官方的项目用了什么黑魔法,这里能直接拉到源代码(图里的外部源),而自己开发的项目做不到这一点。

具体步骤

这块其实官方有说明,但漏了几个关键点导致我卡了非常久,下面会进行详细说明:

  • PS1:以Windows VS为主,其它平台应该类似

  • PS2: 我主要是查看DI的构建逻辑,这块在不同版本差异不大, 所以我直接获取了6.0

1.打开官方仓库

官方仓库[2]

然后你拉取你想看的分支代码到本地,我主要是看

7a0633d7332b97b6358b1027043d278e.png

2.找到他们的构建说明

5307eb418e713951f290298787610c3b.png

3.安装对应平台的基础环境

cea8e66892fad5bdbc9a7b6479d1dfad.png

Windows VS平台是这样安装的:

55cdbc1545ec69c844f797de9821f8b8.pngeb7d1d1b0d4454aea3fa8c20a5686163.png

然后点击查看详细信息,弹出的提示(无法安装XXXXX)可以忽略, 然后点修改即可。

这一步,官方的说法是你只需要安装更高版本的SDK即可,不用一一匹配。通常情况下开发的电脑上都会安装.NET Framework和.NET的几个SDK,一般都有。我自己是安装 .NET Framework 4.0目标包+4.7.2、目标包+NET 6.0的SDK。

[重点]4. 还原对应库

资源浏览器定位到runtime的根目录,记住这个build.cmd

5c6cc3fe7407bca063b8947096531b56.png

右键打开命令行或pwd,像这样执行:

1f41f317388989bc8c11d644a68c50f4.png

脚本会下载一个ps1文件然后自动执行,我们等待即可,他会自动还原我们需要的库,并且把依赖的基础包也一并还原好。

官方的代码结构中已经做好了nuget配置和输出目录, 我们已经不需要额外配置了,下一步进行编译。

5.生成对应库的dll文件

打开对应库的代码文件:

d39292340dacd8460a5cd87abefd5138.png

右键打开命令行或pwd,像这样执行:

13bfff6d5cf175ff1e40c2d42fa69f15.png

等待编译结束去这个目录下找东西

b58dcea45257bd28c79c10fd50744efd.png

每个库都会生成到artifacts下面,然后不同架构对应一个文件夹, 此时你就可以在你的测试项目中直接引用这个dll了, 愉快的调试吧。

[可选]6.生成依赖库文件

我这里是想调试Microsoft.Extensions.DependencyInjection,在Nuget上就能看到他还依赖一个抽象定义包Microsoft.Extensions.DependencyInjection.Abstractions,为了不在调试中卡壳,我把这个包一并如法炮制。

其它

  1. 在查阅资料时发现其实也可以用VS直接编译,但需要配置些东西,我没看明白就用这个办法了,我也不需要编译所有的。

  2. VS Code也可以,但我主要用VS就略过这部分了

  3. build.cmd脚本不加参数似乎是编译所有包, 我不需要就跳过这个了

参考资料

  1. 官方构建文档[3]

  2. 关键构建流程[4]

参考资料

[1]

src/libraries: https://github.com/dotnet/runtime/tree/release/6.0/src/libraries/Microsoft.Extensions.DependencyInjection

[2]

官方仓库: https://github.com/dotnet/runtime

[3]

官方构建文档: https://github.com/dotnet/runtime/blob/main/docs/workflow/requirements/windows-requirements.md

[4]

关键构建流程: https://github.com/dotnet/runtime/blob/main/docs/workflow/README.md

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285411.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

物化视图VS普通视图

2019独角兽企业重金招聘Python工程师标准>>> 物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查…

【CASS精品教程】CASS绘图软件入门初级教程超详细资料

文章目录 第一章 CASS 9.0简介第二章 CASS 9.0快速入门第三章 测制地形图第四章 测制地籍图第五章 土地详查与勘测定界第六章 CASS在数据入库中的应用第七章 CASS 9.0在工程中的应用第八章 数字地图管理第九章 CASS在市政监管中的应用第十章 白纸图数字化第十一章电子平板成图第…

多兼容的JS获取鼠标坐标

//第一、相对于屏幕 function getMousePos(event) {var e event || window.event;return {x:e.screenX,y:screenY} } //第二、相对于浏览器 function getMousePos(event) {var e event || window.event;return {x:e.clientX,y:clientY} }//第三、相对于文档 function getM…

aws-ec2-双网卡问题

问题描述 在已存在的EC2上新添加网卡后发现,凡是和eth0在同一个网段的只能通过eth0访问,不能通过eth1。同样的,在eth1网段的只能通过eth1访问,不能通过eth0访问。 如果既不在eth0也不再eth0 默认走eth0(在没有修改路由表的前提下&…

EditPlust 批量添加自定义工具

先将插件文件***.js文件放到指定目录,比如editplus的安装下新文件夹tools。 (下载地址见文末) 将下列代码内容另存为tool_u.ini 文件(不能改名), 放到EditPlus 的ini文件目录 (工具-设置目录 可…

iOS c语言 基本运算符

2019独角兽企业重金招聘Python工程师标准>>> iOS_06_基本运算符 一、算术运算 c语言一共有34种运算符,包括了常见的加减乘除 1.加法运算 # 除了能做加法运算,还能表示正号:5、90 2.减法运算- # 除了能做减法运算,还能表…

【CASS精品教程】CASS快捷键大全吐血整理

A——画弧(ARC) AA——给实体加地物名 B——自由连接 C——画圆(CIRCLE) COPYCLIP——从不同窗口复制局部 CP——拷贝(COPY) D——绘制电力线 DD——通用绘图命令 DDPTYPE——改变点形状 E——删除(ERASE) F——图形复制 FF——绘制多点房屋 G——绘制高程点 H——线型…

Maui学习之路(三)--Winui3深入探讨

Maui的学习之路 --- Winui3深入探讨学习Maui已经有一段时间,随着不断地深入,对Maui有了一些初步的了解。我们都知道Maui为了保持平台原生特性,所以在每一个平台都使用了平台自身的原生开发框架,如在Windows系统使用了Winui3作为UI…

centos 7.1 apache 源码编译安装

Apache编译安装 一,需要软件: http://mirrors.cnnic.cn/apache//apr/apr-1.5.2.tar.gz 1.apr-1.5.2.tar.gz http://mirrors.cnnic.cn/apache//apr/apr-util-1.5.4.tar.gz 2.apr-util-1.5.4.tar.gz http://exim.mirror.fr/pcre/pcre-8.38.tar.gz 3.pcre-8…

【ArcGIS风暴】ArcGIS平台上点云(.las)数据生成等高线方法案例精解

las是点云数据常见的存储格式,摄影测量和激光雷达数据均采用此格式,点云数据常用来生成等高线,地籍测量,土方量计算等。本文讲解在ArcGIS平台上生成等高线并转换为dwg格式供CASS使用。 扩展阅读: 什么是点云?什么是Las数据集?一篇文章告诉你点云数据的奥秘 ArcGIS+CASS点…

通过两级网关设计来路由服务网格流量

编者的话本文是来自笔者的公司 Tetrate[1] 工程师 Petr McAllister 的分享,Tetrate 的拳头产品是 Tetrate Service Bridge[2](下文简称 TSB),它是在开源的 Istio 和 Envoy 基础上构建的,但为其增加了管理平面。简介Tet…

各个线程顺序循环执行

问题描述:A任务执行完之后执行B任务,B任务执行之后再执行C任务,C任务执行完之后A再执行任务,以此循环下去 Task 1 package com.ydd.work.concurrent;2 3 import java.util.concurrent.atomic.AtomicInteger;4 /**5 * 6 * author…

python类相关

class A:def bar(self):print("BAR")self.f1() class B(A):def f1(self):print("B") class C:def f1(self):print("C") class D(C,B):pass obj D() obj.bar() # 创建了类A、B、C、D; # D继承了C和B,B继承了A,…

Python File 介绍

Open() 方法 Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。 注意:使用 open() 方法一定要保证关闭文件对象,即调用…

H5开发中常用的js方法

2019独角兽企业重金招聘Python工程师标准>>> h5和app之间的webview交互 这是常用的交互方法之一,iOS可以使用WKWebView,安卓可以使用JsBridge,完成常见的交互效果。function webViewHandler(iosCallback, adrCallback) {if (getMobileOperatingSystem() …

【前端优化】

如何进行前端优化 (1) 减少http 请求次数:css spirit(多张小图放一个大图上,用定位选择不同小图),data uri(压缩图片大小), 图片大小控制合适;网页Gzip&#…

GPS RTK(银河1)基准站架设、移动站设置完整操作流程

本文讲解GPS RTK(银河1)基站架设完整操作流程,包括相对坐标、点校正等操作。 文章目录 一、架设基准站二、启动基准站三、架设移动站四、设置移动站一、架设基准站 基准站一定要架设在视野比较开阔,周围环境比较空旷的地方,地势比较高的地方;避免架在高压输变电设备附近…

在.NET 6.0上使用Kestrel配置和自定义HTTPS

本章是《定制ASP NET 6.0框架系列文章》的第四篇。在本章,我们将学习ASP.NET Core的Kestrel配置和自定义HTTPS,好我们开始正文。在ASP.NET Core中,默认情况下HTTPS处于打开状态,这个不是问题,我们无需禁用它。因为如果…

dom4j-2.1.1 jaxen-1.1.6 读取xml数据源

<?xml version"1.0" encoding"UTF-8"?> <data><row><id>1</id><name>JackieChen</name></row><row><id>2</id><name>TomLee</name></row> </data> package…

Virtualbox安装增强工具失败

在安装Virtualbox增强工具安装时出现unable to find the sources of your current Linux kernel&#xff0c;安装失败&#xff0c;导致主机与虚拟机之间不能共享文件夹&#xff0c;不能复制粘贴&#xff0c;鼠标也不能直接移动到物理机&#xff0c;需要按快捷键才行。 解决办法…