C#使用ConfigurationManager读取App.config配置值返回null问题
导致该问题的常见原因及对应解决方法
配置文件加载路径错误
.NET 运行时不会直接读取项目根目录下的App.config文件:- 可执行项目(控制台、WinForm、WPF等)编译时会将
App.config重命名为[你的程序集名].exe.config输出到bin目录,运行时只会读取这个输出目录下的配置文件。右键项目中的App.config打开属性面板,将「复制到输出目录」设置为「如果较新则复制」,重新编译后去bin目录核对生成的.config文件里是否存在你写的test配置项。 - 类库项目生成的
[类库名].dll.config不会被默认加载,类库中调用ConfigurationManager时默认读取的是当前启动项目(宿主程序)的配置文件,需要把对应appSettings配置项写到启动项目的配置文件中才能读取到。 - 传统ASP.NET Web项目不会识别根目录的
App.config,所有appSettings配置需要写在项目根目录的Web.config文件中才会生效。
- 可执行项目(控制台、WinForm、WPF等)编译时会将
缺少必要依赖
- .NET Framework 项目下,
ConfigurationManager所在的System.Configuration程序集不是默认引用项,需要手动在项目依赖中添加System.Configuration的程序集引用,仅写using System.Configuration;命名空间引用不生效。 - .NET Core 3.0/.NET 5及以上版本的项目,默认不自带
ConfigurationManager兼容支持,需要先通过NuGet安装System.Configuration.ConfigurationManager包后才能正常读取App.config的配置。
- .NET Framework 项目下,
配置文件格式或规则冲突
- 检查
configuration节点下的子节点顺序,.NET 要求configSections节点必须是configuration的第一个子节点,如果configSections放在了appSettings节点之后,会导致整个配置文件加载失败,所有配置项读取返回null。 - 如果开启了配置文件发布转换(比如Debug/Release环境对应的配置转换文件),检查转换规则是否误删/覆盖了
appSettings下的test节点,导致发布后的配置文件中不存在该配置项。 - 排查配置文件是否存在不可见的特殊字符、编码错误,确保文件为标准UTF-8编码,节点拼写、key的大小写和代码中读取的key完全匹配。
- 检查
运行时配置被修改
在读取配置的代码前加断点,查看ConfigurationManager.AppSettings.AllKeys集合的内容,如果集合里根本没有test,说明配置文件没有被正确加载;如果集合里有test但读取返回null,排查代码中是否存在调用ConfigurationManager.AppSettings.Remove()等修改配置集合的逻辑,这类逻辑执行后会移除对应key导致读取结果为null。
内容的提问来源于stack exchange,提问作者D4NieLDev
相关产品推荐
相关产品推荐

