两个.NET Core项目共享AppSettings.Development.json遇配置缺失问题
.NET Core共享配置文件无法读取的问题解决
你遇到的核心问题是配置系统的默认加载路径与文件复制位置不匹配,具体原因和解决方法如下:
问题根源
默认情况下,.NET的配置系统会从项目根目录(csproj所在目录)或当前工作目录加载AppSettings.json系列文件。你通过csproj配置将上级目录的配置文件复制到了bin\debug\.net6.0输出目录,但本地调试时,程序的当前工作目录默认是项目根目录,而非输出目录,因此程序会去根目录查找配置文件,自然读不到输出目录里的文件。
解决方法
方法1:修改调试工作目录
直接让调试时的当前工作目录指向输出目录:
- 右键项目 → 选择「属性」→ 切换到「调试」标签页
- 在「工作目录」输入框中填写
$(TargetDir)(这是MSBuild变量,代表项目的输出目录) - 保存设置后重新调试,程序就会从输出目录读取复制过来的配置文件
方法2:显式指定配置文件加载路径
在Program.cs中,创建WebApplicationBuilder时,主动添加输出目录的配置文件路径:
var builder = WebApplication.CreateBuilder(args); // 从程序运行目录(即bin/debug/net6.0)加载配置文件 builder.Configuration.AddJsonFile( Path.Combine(AppContext.BaseDirectory, "AppSettings.Development.json"), optional: false, reloadOnChange: true ); // 后续的服务注册、中间件配置保持不变 var app = builder.Build(); // ...
AppContext.BaseDirectory会返回程序的运行目录(输出目录),这样不管工作目录是什么,都能精准找到复制过来的配置文件。
方法3:调整csproj的复制规则(可选)
如果希望配置文件复制到项目根目录(适配默认加载逻辑),可以修改csproj的配置为:
<ItemGroup> <Content Include="..\AppSettings.*.json"> <Link>%(RecursiveDir)%(Filename)%(Extension)</Link> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> </ItemGroup>
这里的Link标签会让文件在解决方案资源管理器中显示为项目的一部分,同时复制到项目根目录,默认的配置加载逻辑就能直接读取到。
内容的提问来源于stack exchange,提问作者cooper_milton
相关产品推荐
相关产品推荐

