支持 dotnet 6 的 dnSpy 神器版本
官方的 dnSpy 在 2021 时,由于某些吃瓜的原因 wtfsck 将 dnSpy 给 Archived 掉,在大佬被哄好之前,预计是不再更新。最新官方版本对 dotnet 6 的支持较弱,对于很多 dotnet 6 应用都无法成功调试,附加调试上去将会让应用卡住。好在 dnSpy 是开源的,也刚好 lsj 大佬改得动,于是改了一个支持 dotnet 6 的版本
什么是 dnSpy 神器?请看 神器如 dnSpy,无需源码也能修改 .NET 程序 - walterlv
我现在使用最多的调试工具,除了 VisualStudio 之外,就是 dnSpy 工具了。使用 dnSpy 可以让我方便调试用户端的应用。在完成了将团队里面最大的项目升级到 dotnet 6 时,就在升级过程遇到了一些问题,想要调试,却发现没有合适的工具,详细请看 dotnet 6 在 Win7 系统证书链错误导致 HttpWebRequest 内存泄露
为了让我减少加班,我请了 lsj 帮忙改改 dnSpy 神器,让 dnSpy 可以调试 dotnet 6 的应用
这是支持 dotnet 6 版本的 dnSpy 神器下载地址,也是修改之后开源的地址: https://github.com/kkwpsv/dnSpy/releases/tag/6.1.9
如果大家下载不了,可以发邮件让我用其他方式发给你
那改好了是不是就完成了?还有一个问题是为什么 dnSpy 对 dotnet 6 的支持较弱呢?有以下几个原因,对应的修复方法还请看 lsj 的改动 https://github.com/kkwpsv/dnSpy/commit/a217b257453147c5d9db45070f7555f6395329bf
如 [DAC][DBI] ICorDebugModule::GetMetaDataInterface fails in net6.0 for "Anonymously Hosted DynamicMethods Assembly" in unit test project. · Issue #62977 · dotnet/runtime 所说的原因,由于 "Anonymously Hosted DynamicMethods Assembly" 没有定义 IMetaDataImport2 接口,因此在 https://github.com/dnSpy/dnSpy/blob/2b6dcfaf602fb8ca6462b8b6237fdfc0c74ad994/Extensions/dnSpy.Debugger/dnSpy.Debugger.DotNet.CorDebug/Impl/ModuleCreator.cs#L94-L96 将拿到空,如以下代码,将抛出 InvalidOperationException 错误
var comMetadata = dnModule.CorModule.GetMetaDataInterface<IMetaDataImport2>();
if (comMetadata is null)
throw new InvalidOperationException();
修复的方式就是不抛出异常,而是自己定义一个 继承 DmdLazyMetadataBytes 类型的 DmdLazyMetadataBytesNull 类型,进行返回,如以下代码
if (comMetadata is null)
// "Anonymously Hosted DynamicMethods Assembly" not implement IMetaDataImport2, we just return DmdLazyMetadataBytesNull
return () => new DmdLazyMetadataBytesNull();
同时在 DmdAppDomainImpl.cs 里面,返回 DmdNullMetadataReader 即可,如此也许会影响读取程序集的信息,但好过无法调试
这个 "Anonymously Hosted DynamicMethods Assembly" 没有定义 IMetaDataImport2 接口,也影响 https://github.com/dnSpy/dnSpy/blob/2b6dcfaf602fb8ca6462b8b6237fdfc0c74ad994/Extensions/dnSpy.Debugger/dnSpy.Debugger.DotNet.CorDebug/dndbg/Engine/CorAssembly.cs#L56-L60 的代码,如以下代码,拿到的 ManifestModule 是空值。好在这里只是在 dnSpy 应用的 Debug 模式才会炸掉
var module = ManifestModule;
Debug2.Assert(module is not null);
修复的方法只是将 Assert 的代码干掉即可
经过以上更改,就可以让 dnSpy 支持 dotnet 6 的调试
嗯,现在我觉得 dnSpy 作者做的还是太对了,我似乎越来越觉得开源也是一个不对的事情,那就是 SB 太多了。本来今天是想着将 dnSpy 在堆栈网上广告一下,造福一下国外的小伙伴。可惜遇到了傻比,最后我将问题和回答都删除了。这个事让我更加理解了很多开源作者最后选择了闭源的做法,以及让我更加佩服维护社区的大佬们。有人问,原作者关闭了 dnSpy 的瓜是什么?其中一个瓜就是被傻子给气的,开源了不收钱了,反而被当成理所当然,还要这要那,不满足了还被骂。具体的瓜还请自己去找了
我认为所有的参与开源和分享知识的行为都理应受到表扬称赞,共同维护一个良好的开发者生态
十分感谢 wtfsck 大佬提供的 dnSpy 神器,和 lsj 让 dnSpy 支持 dotnet 6 调试
支持 dotnet 6 的 dnSpy 神器版本的更多相关文章
- CYQ.Data 正式支持 DotNET Core 版本发布
闲话几句: 自从上周开始,IOS人员逝去,就开始接手IOS的代码了. 并开始整理IOS的代码(包括当时一开始设计的开发框架). 在未来不远的日子里,设想是有一个系列详细的介绍I恋App和IT连App及 ...
- ABP abp zreo 老版本 支持dotnet framework 4.0
下载了个abp zreo的老版本,module-zero-template-1.5.1, 只有这个版本支持.net framework4.0,其它都依赖.net framework 4.5和4.6去了 ...
- FIREDAC连接MSSQL 2000报不能支持连接MSSQL2000及更低版本的解决办法
FIREDAC连接MSSQL 2000的时候会报错,原因是MSSQL CLIENT11或MSSQL CLIENT10客户端驱动程序已经不支持连接MSSQL2000及更低版本的数据库. 解决办法: 设置 ...
- 无法升级数据库....因为此版本的 SQL Server 不支持该数据库的非发布版本(539) 解决方案
使用SQL2012附加一个数据库时报出了以下错误:“无法升级数据库....因为此版本的 SQL Server 不支持该数据库的非发布版本(539).不能打开与此版本的 sqlserver.exe 不兼 ...
- Mybatis3.4.0不支持mybatis-spring1.2.5及以下版本
今天将工程的Mybatis的版本由3.3.0升级到3.4.0导致程序运行错误,使用的mybatis-spring版本是1.2.3,错误内容如下,最后发现是SpringManagedTransactio ...
- (转)IHS配置安全漏洞: 支持不推荐使用的 SSL 版本、在降级的旧加密上填充 Oracle、检测到 RC4 密码套件、支持弱 SSL 密码套件、 重构 RSA 导出键(又称为 FREAK)
原文:https://blog.csdn.net/lyd135364/article/details/52179426 都是由于ihs配置中支持不推荐使用的ssl版本和弱密码套件引起的. 只要在配置文 ...
- 超强PHP集成环境,支持800多个不同PHP版本同时运行,无限自定义添加mysql与php版本
转载自今日头条 小编最近发现PHPWAMP竟然又更新了,激动之余向大家介绍一下新版的强大功能. PHPWAMP是纯绿色集成环境,高版本php无需安装VC运行库,默认已经集成VC运行库!Nginx支持服 ...
- Spring Cloud 2021.0.0 正式发布,第一个支持Spring Boot 2.6的版本!
美国时间12月2日,Spring Cloud 正式发布了第一个支持 Spring Boot 2.6 的版本,版本号为:2021.0.0,codename 为 Jubilee. 在了解具体更新内容之前, ...
- Windows 10系统设置多用户同时远程登录教程 and rdpwrap下载 and Win10多用户同时远程桌面的另类解决方案---支持1809和1909和2004版本V2.0
转载简书: Windows 10系统设置多用户同时远程登录教程 - 简书 (jianshu.com) 转载github: 发布 ·stascorp/rdpwrap ·GitHub 转载csdn: Wi ...
- LNMP下防跨站、跨目录安全设置,仅支持PHP 5.3.3以上版本
PHP 5.3.3以上的版本,可以修改/usr/local/php/etc/php.ini在末尾里加入: [HOST=www.vpser.net] open_basedir=/home/wwwroot ...
随机推荐
- YCProgress自定义百分比进度条
目录介绍 1.本库优势亮点 2.使用介绍 2.1 圆环百分比进度条 2.2 直线百分比进度条 2.3 仿杀毒类型百分比进度条 3.注意要点 4.效果展示 5.其他介绍 1.本库优势亮点 圆环百分比进度 ...
- 三维模型OBJ格式轻量化顶点压缩主要技术方法分析
三维模型OBJ格式轻量化顶点压缩主要技术方法分析 三维模型的OBJ格式轻量化中,顶点压缩是一项重要的技术方法,用于减小模型文件的大小.以下是关于三维模型OBJ格式轻量化顶点压缩的主要技术方法的分析: ...
- spring boot @Scheduled
例子 @EnableScheduling @Component public class Job { /** * 每秒执行一次 */ @Scheduled(cron = "0/1 * * * ...
- WC-Write Combining 合并写技术
WC-Write Combining 合并写技术 为了提高写效率: CPU在写入L1时,同时用WC写入L2 实验代码: public class WriteCombining { private st ...
- 英语文档阅读学习系列之Zynq-7000 EPP Software Developers Guide
阅读ug821-zynq-7000-swdev记录 1.略看目录Table 依旧采用总说加解释的模式,这种方式易于查找,是可靠的框架.目录词条依次为: Introduction Software Ap ...
- docker安装es-header及相关问题解决
安装es-header docker pull mobz/elasticsearch-head:5 docker run --restart=always --name elasticsearch-h ...
- 浅谈JVM整体架构与调优参数
本文分享自华为云社区<[性能优化]JVM整体架构与调优参数说明>,作者: 冰 河. JVM的分类 这里,我们先来说说什么是VM吧,VM的中文含义为:虚拟机,指的是使用软件的方式模拟具有完整 ...
- 学习Source Generators之输出生成的文件
上一篇文章学习了通过获取和解析swagger.json的内容,来生成API的请求响应类. 但是其中无法移动与编辑. 那么本文将介绍如何输出生成的文件. EmitCompilerGeneratedFil ...
- #搜索,计算几何#JZOJ 4016 圈地为王
题目 在\(n\)行\(m\)列的网格中,你要圈一些地. 你从左上角出发,最后返回左上角,路径内部的区域视为被你圈住. 你不可以进入网格内部, 只能在边上行走. 你的路径不能在左上角以外自交, 但是边 ...
- reactive stream协议详解
目录 背景 什么是reactive stream 深入了解java版本的reactive stream Publisher Subscriber Subscription Processor JDK中 ...