.NET Core 2.1中ConfigurationBuilder.Build()引发StackOverflowException求助
我之前在使用.NET Core预览版SDK时也碰到过类似的诡异栈溢出问题,给你几个实际可行的排查思路:
检查NuGet依赖版本匹配度
确保你的Microsoft.Extensions.Configuration、Microsoft.Extensions.Configuration.Json等配置相关包的版本和你使用的2.1.300-preview2-008530 SDK版本完全一致。如果手动安装了不同版本的这类包,很容易因为内部逻辑不兼容触发循环调用,最终导致栈溢出。可以右键项目→管理NuGet程序包,统一把这些包更新到对应预览版本。验证appsettings.json的结构
有时候配置文件里的循环引用(比如某个配置节点递归引用了自身)会让配置解析器陷入无限循环。你可以先替换成一个极简的配置文件测试:{ "Logging": { "LogLevel": { "Default": "Warning" } } }如果替换后不再报错,就说明原配置文件存在结构问题,需要仔细排查循环引用的节点。
排查代码中的循环依赖
检查你的Startup构造函数或者配置初始化相关的代码,有没有出现循环依赖的情况?比如在构造Configuration的过程中,不小心调用了某个依赖该Configuration的服务,而那个服务又反过来需要构造函数里的配置实例,这种递归调用很容易撑爆栈。清理项目缓存重新生成
预览版SDK的编译缓存有时候会残留旧的异常逻辑,你可以手动删除项目根目录下的bin和obj文件夹,或者执行命令:dotnet clean之后重新生成项目,再测试配置初始化代码。
用空项目做对比测试
创建一个全新的.NET Core 2.1 Preview 2 Web空项目,把触发报错的配置代码复制进去运行。如果空项目没有问题,就说明你现有项目的某个自定义配置、依赖或者第三方包存在冲突,可以逐步迁移代码和配置来定位问题点。
内容的提问来源于stack exchange,提问作者meta4

