在Visual Studio的C#项目中读取appsettings.json值的方法及多不可重命名appsettings.json文件的解决方案
解决C#项目中读取同名appsettings.json的问题(通过相对路径)
当然可以通过相对路径实现需求!针对你从tst目录访问src/Api/Properties/appsettings.json的场景,我给你两种实用的解决方案,完全不需要重命名任何文件:
方法一:手动构建配置时指定相对路径
这是最直接的方式,通过ConfigurationBuilder明确指向目标配置文件的相对路径:
步骤1:安装必要的NuGet包
确保你的测试项目(tst目录下的项目)已经安装了以下包:
Microsoft.Extensions.ConfigurationMicrosoft.Extensions.Configuration.Json
步骤2:编写加载配置的代码
在需要读取配置的地方,用相对路径定位到目标文件:
using Microsoft.Extensions.Configuration; using System.IO; // 构建配置对象 var configBuilder = new ConfigurationBuilder() // 先定位到解决方案根目录(根据你的输出目录调整层级,这里假设测试项目输出在bin/Debug/netX.x下,需要回退3级) .SetBasePath(Path.Combine(Directory.GetCurrentDirectory(), "../../../")) // 指向目标appsettings.json的相对路径 .AddJsonFile("src/Api/Properties/appsettings.json", optional: false, reloadOnChange: true); IConfiguration config = configBuilder.Build(); // 示例:读取配置值 var apiUrl = config["ApiSettings:BaseUrl"]; var connectionString = config.GetConnectionString("DefaultConnection");
路径调试技巧
如果不确定相对路径是否正确,可以先打印当前目录和解析后的绝对路径来验证:
var currentDir = Directory.GetCurrentDirectory(); var targetPath = Path.GetFullPath("../../../src/Api/Properties/appsettings.json", currentDir); Console.WriteLine($"当前目录:{currentDir}"); Console.WriteLine($"目标文件绝对路径:{targetPath}");
根据输出的绝对路径调整../../../的层级,直到指向正确的文件。
方法二:通过项目引用同步配置文件(避免路径层级问题)
如果你不想处理复杂的相对路径层级,可以通过项目引用将目标配置文件同步到测试项目的输出目录:
- 在测试项目中右键 → 添加 → 现有项
- 导航到
src/Api/Properties/appsettings.json,选中文件后,点击添加按钮旁边的下拉箭头,选择添加为链接 - 在测试项目中找到这个链接文件,右键 → 属性:
- 将复制到输出目录设置为如果较新则复制
- 将生成操作保持为内容
之后你就可以在代码中直接用文件名加载(因为文件已经被复制到测试项目的输出目录了),不过注意如果有多个同名的appsettings.json,这种方式会覆盖,所以更推荐方法一。
关键注意事项
- 确保目标
appsettings.json的生成操作设置为内容,否则文件不会被识别为可访问的项目资源 - 如果是.NET Framework项目,配置加载方式略有不同,但核心思路都是通过相对路径定位文件
内容的提问来源于stack exchange,提问作者SMCMario
相关产品推荐
相关产品推荐

