使用C# ConfigurationBuilder读取JSON获空值,文件存在却提示未找到
解决控制台应用读取JSON配置文件时的文件未找到问题
问题分析
你遇到的空值问题根源是程序运行时找不到configuration.json文件——即便文件在项目目录中存在,默认情况下VS不会自动将其复制到程序的输出目录(bin/Debug或bin/Release),导致ConfigurationBuilder加载不到文件,自然读不到配置值。另外代码里还有一处拼写错误:Console.WritLine应该是Console.WriteLine,这会导致编译错误。
解决方案
1. 配置文件复制设置
右键项目中的configuration.json文件 → 属性:
- 将复制到输出目录设置为 如果较新则复制 或 始终复制
- 确保生成操作设置为 内容
这样每次编译时,VS会把配置文件同步到输出目录,程序就能找到它了。
2. 验证当前工作目录
可以在代码里先打印当前工作目录,确认程序运行的路径是否正确:
Console.WriteLine("当前工作目录:" + Directory.GetCurrentDirectory());
如果输出的路径不是项目的输出目录,可能需要手动指定配置文件的绝对路径,或者调整运行时的工作目录。
3. 修正代码拼写错误
把所有Console.WritLine改为Console.WriteLine,否则会出现编译失败。
修正后的完整代码示例
public class Program { public IConfigurationRoot Configuration { get; set; } public Program() { // 先打印当前目录,排查路径问题 Console.WriteLine("当前工作目录:" + Directory.GetCurrentDirectory()); Configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("configuration.json", optional: false, reloadOnChange: true) // 把optional设为false,方便快速发现文件未找到问题 .Build(); } static void Main(string[] args) { Program p = new Program(); string one = p.Configuration.GetValue<string>("Configuration:one"); string two = p.Configuration.GetValue<string>("Configuration:two"); string three = p.Configuration.GetValue<string>("Configuration:three"); Console.WriteLine(one); Console.WriteLine(two); Console.WriteLine(three); } }
额外提示
- 如果文件名包含大小写,注意系统是否区分大小写(比如Linux系统),确保代码里的文件名和实际文件名一致。
- 可以尝试使用
AddJsonFile的重载,传入绝对路径测试,确认文件是否能被正确加载:
.AddJsonFile(@"C:\YourProjectPath\configuration.json", optional: false)
内容的提问来源于stack exchange,提问作者David Watson
相关产品推荐
相关产品推荐

