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

ASP.NET Core 6.0 Azure函数自定义类库无法加载appsettings.json

解决Azure函数类库加载appsettings.json失败的问题

核心问题原因

类库中使用AppContext.BaseDirectory获取的路径是Azure Functions CLI的运行目录(即错误提示中的C:\Users\HK2769561\AppData\Local\AzureFunctionsTools\Releases\4.35.0\cli_x64),而非你的函数项目输出目录,因此找不到appsettings.json。

推荐解决方案:依赖注入复用配置

不要在类库中单独构建配置实例,直接复用函数项目中已正确加载的配置,通过依赖注入传递:

  1. 在函数项目Startup.cs中注册配置到DI容器
    修改Configure方法,构建完config后,将其注册为单例:
public override void Configure(IFunctionsHostBuilder builder)
{
  var executionContextOptions = builder.Services.BuildServiceProvider()
     .GetService<IOptions<ExecutionContextOptions>>().Value;
  var currentDirectory = executionContextOptions.AppDirectory;

  var config= new ConfigurationBuilder()
  .SetBasePath(currentDirectory) // 直接用executionContextOptions.AppDirectory比Parent路径更可靠
  .AddJsonFile("appsettings.json")
  .Build();

  // 将配置注册到DI容器
  builder.Services.AddSingleton<IConfiguration>(config);
}
  1. 类库中通过构造函数注入IConfiguration
    修改EngagementKeyVault的构造函数,接收注入的配置:
private readonly IConfiguration _configuration;

public EngagementKeyVault(IConfiguration configuration)
{
  _configuration = configuration;
}

这样类库就能直接使用函数项目中正确加载的appsettings.json配置,完全避免路径问题。

备选方案:传递函数项目的根目录到类库

如果必须在类库中自行构建配置,需要将函数项目的正确根目录传递过去:

  • 在函数项目调用类库时,把executionContextOptions.AppDirectory作为参数传入类库的构造函数或方法
  • 类库中使用该路径作为SetBasePath的参数:
public EngagementKeyVault(string appRootDirectory)
{
  _configuration = new ConfigurationBuilder()
    .SetBasePath(appRootDirectory)
    .AddJsonFile("appsettings.json")
    .Build();
}

这种方式不如依赖注入优雅,推荐优先使用第一种方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:03:35