在netcoreapp中如何让StreamReader加载代码同目录下的JSON文件?
.NET Core读取代码目录下JSON文件的解决方法
问题根源
.NET Core默认将程序的工作目录设置为编译后的输出目录(即bin/Debug/netcoreapp3.1),而非项目代码所在的目录,所以直接用GetFullPath()这类方法会指向输出目录。
解决办法
1. 同步文件到输出目录(最简单)
右键项目中的JSON文件 → 属性 → 在「复制到输出目录」选项中选择「如果较新则复制」或「始终复制」。
编译时文件会自动同步到bin目录,此时原有的StreamReader路径代码就能正常读取文件。
2. 直接获取代码目录的绝对路径
通过代码推导项目代码所在目录,示例:
// 从当前工作目录往上退一级,得到项目代码目录 string projectDir = Path.GetDirectoryName(Directory.GetCurrentDirectory()); string jsonFilePath = Path.Combine(projectDir, "your-json-file.json"); // 读取文件 using var reader = new StreamReader(jsonFilePath); string jsonContent = reader.ReadToEnd();
如果上述路径不对,可尝试多退一级(适合多层目录结构):
string projectDir = Path.GetDirectoryName(Path.GetDirectoryName(Directory.GetCurrentDirectory()));
3. 使用.NET Core内置配置系统(推荐)
无需手动用StreamReader,利用框架自带的配置加载能力:
using Microsoft.Extensions.Configuration; // 构建配置对象 var configBuilder = new ConfigurationBuilder() // 指定代码目录为配置文件的基路径 .SetBasePath(Path.GetDirectoryName(Directory.GetCurrentDirectory())) .AddJsonFile("your-json-file.json", optional: false); IConfiguration config = configBuilder.Build(); // 直接读取配置项,比如获取某个键的值 string value = config["YourConfigKey"];
内容的提问来源于stack exchange,提问作者Limey
相关产品推荐
相关产品推荐

