支持 dotnet 6 的 dnSpy 神器版本

25分钟前阅读1回复0
dyyh
dyyh
  • 管理员
  • 注册排名7
  • 经验值66220
  • 级别管理员
  • 主题13244
  • 回复0
楼主

官方的 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 系统证书链错误招致 内存泄露

为了让我削减加班,我请了 lsj 帮手改改 dnSpy 神器,让 dnSpy 能够调试 dotnet 6 的利用

那是撑持 dotnet 6 版本的 dnSpy 神器下载地址,也是修改之后开源的地址:

假设各人下载不了,能够发邮件让我用其他体例发给你

如 [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 接口,因而在 错误

varcomMetadata = dnModule.CorModule.GetMetaDataInterfaceIMetaDataImport2;

if(comMetadata isnull)

thrownewInvalidOperationException;

修复的体例就是不抛出反常,而是本身定义一个 继续 DmdLazyMetadataBytes 类型的 DmdLazyMetadataBytesNull 类型,停止返回,如以下代码

if(comMetadata isnull)

// "Anonymously Hosted DynamicMethods Assembly" not implement IMetaDataImport2, we just return DmdLazyMetadataBytesNull

return= newDmdLazyMetadataBytesNull;

同时在 DmdAppDomainImpl.cs 里面,返回 DmdNullMetadataReader 即可,如斯也许会影响读取法式集的信息,但好过无法调试

那个 "Anonymously Hosted DynamicMethods Assembly" 没有定义 IMetaDataImport2 接口,也影响 形式才会炸掉

varmodule = ManifestModule;

Debug2.Assert(module isnotnull);

修复的办法只是将 Assert 的代码干掉即可

颠末以上更改,就能够让 dnSpy 撑持 dotnet 6 的调试

嗯,如今我觉得 dnSpy 做者做的仍是太对了,我似乎越来越觉得开源也是一个不合错误的工作,那就是 SB 太多了。原来今天是想着将 dnSpy 在仓库网上告白一下,造福一下国外的小伙伴。可惜碰着了傻比,最初我将问题和答复都删除了。那个事让我愈加理解了良多开源做者最初抉择了闭源的做法,以及让我愈加钦佩庇护社区的大佬们。有人问,原做者封闭了 dnSpy 的瓜是什么?此中一个瓜就是被傻子给气的,开源了不收钱了,反而被当成天经地义,还要那要那,不称心了还被骂。详细的瓜还请本身往找了

我认为所有的参与开源和分享常识的行为都理应遭到夸奖赞扬,配合庇护一个优良的开发者生态

非常感激 wtfsck 大佬供给的 dnSpy 神器,和 lsj 让 dnSpy 撑持 dotnet 6 调试

0
回帖

支持 dotnet 6 的 dnSpy 神器版本 期待您的回复!

取消