.NET 8 Preview 7及RC1似乎忽略IlcGenerateStackTraceData属性
问题场景
我们项目使用 Native AOT 发布,配置了 IlcDisableReflection=true 和 IlcGenerateStackTraceData=true。在 .NET 8 Preview 6 及之前版本中,发布后的二进制文件不会生成堆栈跟踪元数据,符合预期。但升级到 .NET 8 Preview 7 或 RC1 后,即便保留相同配置,二进制文件里依然出现了堆栈跟踪元数据。
可能的解决方向
检查配置语义变更
.NET 8 Preview 7 对 Native AOT 的堆栈跟踪支持逻辑做了调整,IlcGenerateStackTraceData的作用可能发生了反转或变更。可以尝试将该属性设置为false,验证是否能恢复之前的行为,阻止元数据生成。使用新增的堆栈跟踪控制配置
.NET 8 后期预览版新增了IlcStackTraceSupport配置项,它可能覆盖了原有IlcGenerateStackTraceData的行为。尝试在项目文件中显式添加:<IlcStackTraceSupport>None</IlcStackTraceSupport>这个配置直接控制堆栈跟踪的支持级别,设为
None应该会彻底禁用相关元数据的生成。排查隐式反射依赖
确认IlcDisableReflection=true是否完全生效。有时项目中的第三方库或某些代码路径可能无意中引入了反射调用,导致编译器被迫生成部分元数据。可以通过 Native AOT 的分析日志(添加/p:IlcGenerateDependenciesFile=true生成依赖文件)排查是否有未预期的反射依赖。
社区情况
目前已有不少开发者在升级到 .NET 8 Preview 7 后遇到类似的 Native AOT 配置行为变化问题,核心原因在于堆栈跟踪和反射元数据生成逻辑的调整。
内容的提问来源于stack exchange,提问作者deafsheep

