本文记录 dotnet 9 的一个已知且当前已修问题。默认开启 CET 导致一些模块执行时触发崩溃

官方文档: Breaking change: CET supported by default - .NET Microsoft Learn

表现:

调用 OpenFileDialog 的 ShowDialog 将会异常崩溃,崩溃异常是 FAST_FAIL_SET_CONTEXT_DENIED

或退出错误码为 0xc0000409 STATUS_STACK_BUFFER_OVERRUN

修复的代码:

此问题已在 https://github.com/dotnet/runtime/pull/109074 修复

永久解决方法:

更新 dotnet sdk 版本,再次构建发布

理论分析更新 dotnet runtime 也有用,但我没有尝试过,欢迎大佬补充

临时解决方法:

如果不便更新 dotnet sdk 版本,可通过如下设置禁用 CET 开启

<CETCompat>false</CETCompat>

以上设置放在 csproj 项目文件的 PropertyGroup 里面,更改之后的 csproj 代码大概如下

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net9.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <CETCompat>false</CETCompat>
  </PropertyGroup>

</Project>

相关问题:


本文会经常更新,请阅读原文: https://blog.lindexi.com/post/dotnet-9-%E5%B7%B2%E7%9F%A5%E9%97%AE%E9%A2%98-%E9%BB%98%E8%AE%A4%E5%BC%80%E5%90%AF-CET-%E5%AF%BC%E8%87%B4%E8%BF%9B%E7%A8%8B%E5%B4%A9%E6%BA%83.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

如果你想持续阅读我的最新博客,请点击 RSS 订阅,推荐使用RSS Stalker订阅博客,或者收藏我的博客导航

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接: https://blog.lindexi.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系

微软最具价值专家


无盈利,不卖课,做纯粹的技术博客

以下是广告时间

推荐关注 Edi.Wang 的公众号

欢迎进入 Eleven 老师组建的 .NET 社区

以上广告全是友情推广,无盈利