C# .NET9 引用C++ DLL Library后自动退出

2025-01-10  乐帮网

.net

升级之前的一个项目从.NET8到.NET9后发现一个问题,程序总是莫名奇妙的闪退,通过跟踪定位到位置,发现是调用C++ dll中的方法的时候,程序自动退出,VS没有报任何的错误。但是把项目回滚到.NET 8的时候又一切正常,在没有改任何代码的情况下这种情况猜测可能是.NET9的一个Bug,在网上搜索了好多,发现.NET9默认情况下支持 CET,
从 .NET 9 开始,只允许加载到 .NET 进程的共享库使用 SetThreadContext、RtlRestoreContextNtContinue/ 或其异常处理程序将线程上下文设置为以下位置:
存在于阴影堆栈上。
在异常处理的允许延续地址的表中(由 /EHCONT 编译器选项或 SetProcessDynamicEHContinuationTargets API 生成)。
如果库尝试将线程上下文更改为任何其他位置,则进程将终止。
解决办法:
可以通过添加到 <CETCompat>false</CETCompat> 应用的项目文件(例如 .csproj 文件)来选择退出 CET。
使用Windows 安全应用或组策略选择退出特定 .NET 应用程序的硬件支持的堆栈强制实施。 有关详细信息,请参阅 “启用攻击保护”。

https://learn.microsoft.com/zh-cn/dotnet/core/compatibility/interop/9.0/cet-support

公众号二维码

关注我的微信公众号
在公众号里留言交流
投稿邮箱:1052839972@qq.com

庭院深深深几许?杨柳堆烟,帘幕无重数。
玉勒雕鞍游冶处,楼高不见章台路。
雨横风狂三月暮。门掩黄昏,无计留春住。
泪眼问花花不语,乱红飞过秋千去。

欧阳修

付款二维码

如果感觉对您有帮助
欢迎向作者提供捐赠
这将是创作的最大动力