You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core跨库配置问题:如何正确引用类库的JSON配置文件?

解决.NET类库配置文件找不到的问题

核心方案:基于类库程序集位置定位配置文件

问题根源在于AddJsonFile默认使用当前工作目录(启动项目Bar的输出目录)查找文件,而类库Foo的配置文件实际和Foo.dll放在一起。我们可以修改Foo的配置初始化方法,通过程序集位置直接定位到配置文件的真实路径:

修改Foo的Configuration.cs代码:

/* /dev/Foo/configuration.cs */
using System.Reflection;
using System.IO;

public static IConfigurationBuilder BuildBaseConfiguration()
{
    // 获取Foo类库程序集的所在目录
    var assemblyDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
    // 拼接配置文件的完整物理路径
    var configFullPath = Path.Combine(assemblyDir, "fooConfig.json");

    return new ConfigurationBuilder()
        .AddJsonFile(configFullPath, optional: false);
}

这个方法适配所有场景:

  • 本地调试时,Foo.dll在/dev/Foo/bin/Debug/net6.0/,代码会直接从该目录加载fooConfig.json
  • 用NuGet分发时,Foo.dll和配置文件会被打包到NuGet包中,安装后会复制到Bar的输出目录(或NuGet缓存的包目录),代码依然能准确定位

补充:NuGet打包的配置要求

如果Foo要以NuGet包分发,需要在Foo的.csproj中添加以下配置,确保fooConfig.json被正确打包并复制到引用项目的输出目录:

<!-- Foo.csproj 中添加 -->
<ItemGroup>
  <None Include="fooConfig.json">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    <PackageCopyToOutput>true</PackageCopyToOutput>
  </None>
</ItemGroup>

本地调试的验证

本地引用Foo.dll时,确保Foo项目的fooConfig.json属性中,复制到输出目录设置为“较新则复制”(对应CopyToOutputDirectory: PreserveNewest),这样编译时配置文件会自动复制到Foo的输出目录,配合上面的代码就能正确加载。

内容的提问来源于stack exchange,提问作者Christopher Walters

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 16:55:25