.NET7/8有bug吗?

💡 原文中文,约1200字,阅读约需3分钟。
📝

内容提要

.NET 7/8存在一些bug,但通常不会遇到,因为托管层面稳定。两个有价值的问题是:1. 进行.NET 8分层编译Debug CLR时,调试会直接退出;2. 在生成.NET 7的主机corehost.sln时,代码报错,解决方案是升级cmake和VS版本。这些问题不影响托管层级的代码运行。

🔎

延伸解读

托管层稳定,非托管层问题多

文章指出.NET 7/8的bug主要存在于非托管层(CLR/JIT的C++代码),而托管层(业务代码依赖的SDK)非常稳健。官方runtime未关闭的Issuse约5K+,但普通开发者日常接触的是托管层,因此很少遇到。这提醒我们,评估框架稳定性时需区分层次:业务开发无需过度担忧底层bug,但涉及运行时定制或调试时则需留意。

分层编译调试退出:难以定位的运行时问题

Issue1描述了.NET 8分层编译Debug CLR时调试器不定时退出的现象。由于分层编译涉及多线程并行,需同时监控主线程、析构线程、工作线程等,定位难度极高。作者坦言目前无法确认问题点。该bug不影响托管代码运行,但给需要调试运行时的开发者带来困扰,也说明底层调试工具链仍有改进空间。

构建报错:升级工具链的实用启示

Issue2是在生成.NET 7主机corehost.sln时出现代码报错,主要涉及hostfxr代码。解决方案是升级cmake和VS版本。作者由此提出一个思路:触及.NET底层核心时,应尽量使用最新工具链版本,以避免新旧版本不兼容带来的不必要问题。这对从事运行时或本地库开发的读者具有参考价值。

❓

Q&A

.NET 7/8 到底有没有 bug?

有,而且不少,官方 runtime 目前未关闭的 Issue 大约有 5K+。但平常很少遇到,因为平常用到的都是托管层面,托管层面基本不会出错,SDK 非常稳健。这些 bug 主要存在于非托管层面,即 CLR/JIT 的 C++ 代码中。

为什么我平时用 .NET 7/8 很少遇到 bug?

因为日常开发使用的都是托管层面的功能,托管层面与业务层级挂钩,SDK 非常稳健,基本上不会出错。已知的 bug 大多集中在非托管层面(CLR/JIT 的 C++ 代码),不影响托管代码的运行。

.NET 8 分层编译 Debug CLR 时调试直接退出是什么问题?

这是一个已知 Issue(编号 94964),在进行 .NET 8 分层编译 Debug CLR 时,调试几次后 VS 会直接自动退出 Debug,且退出时间不固定。由于分层编译是多线程并行执行,需要同时监控多个线程,确认问题点非常困难。该问题不影响托管层级的代码运行。

生成 .NET 7 的 corehost.sln 时出现代码报错怎么办?

这是 Issue 88115,主要是 hostfxr 代码的问题,在通过 build -vs 生成时会出现莫名错误。解决方案很简单:升级 cmake 和 VS 到最新版本即可解决。这也提供了一个思路:触及 .NET 底层核心时,尽量使用最新的工具链版本,可以避免很多不必要的问题。

这两个 .NET 7/8 的 bug 会影响我的业务代码运行吗?

不会。这两个问题都不影响托管层级的业务代码运行。第一个是分层编译调试时 VS 退出,但分层编译能正常运行;第二个是生成主机项目时的工具链问题,升级工具链即可解决。它们都只涉及非托管层面的开发调试。

遇到 .NET 底层核心相关的问题,有什么通用解决思路?

可以往最新的工具链版本上靠,即升级到最新版本(如 cmake、VS 等),这样可以避免很多不必要问题的干扰。例如 Issue 88115 就是通过升级 cmake 和 VS 解决的。

🏷️

标签

➡️

继续阅读