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

.NET 7 API本地发布后无法读取appsettings.json配置值

.NET 7 API发布后无法读取appsettings.json配置值的问题

问题背景

为获取准确的运行指标,将.NET 7 API发布后,应用无法读取appsettings.json中的配置值。本地VS Code调试时一切正常,可正常访问MongoDB及读取配置,但发布后调用MongoDB接口报错,且读取到的配置值与文件中设置不符。

配置文件内容

appsettings.json及appsettings.development.json内容如下:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "MongoDbOptions": {
    "ConnectionString": "mongodb://localhost",
    "DatabaseName": "testDb"
  },
  "AllowedHosts": "*",
  "ApplicationOptions": {
    "ShowExceptions": true,
    "ValidateQuery": true
  }
}

Program.cs配置代码

builder.Services.Configure<MongoDbOptions>(builder.Configuration.GetSection(nameof(MongoDbOptions)));
builder.Services.Configure<ApplicationOptions>(builder.Configuration.GetSection(nameof(ApplicationOptions)));

配置通过IOptions<ApplicationOptions>和IOptions<MongoDbOptions>注入到业务代码中。

发布与运行步骤

  1. 执行发布命令:
dotnet publish -c Release -o ./bin/Publish
  1. 运行发布后的程序:
dotnet D:\GitLocal/CrudMetrics/bin/Publish/CrudMetrics.Api.dll --urls "https://localhost:7279"

错误现象

  • 调用MongoDB接口时报错:

MongoDB.Driver.MongoConfigurationException: The connection string '' is not valid.

  • 在控制器中抛出异常测试配置读取,结果显示:

System.Exception: Value of _applicationOptions.ShowExceptions:False.

配置文件中ShowExceptions设为true,但发布后读取值为false,确认配置文件与CrudMetrics.Api.dll在同一目录且内容正确。

问题原因及解决方法

1. 运行环境不匹配

.NET默认根据ASPNETCORE_ENVIRONMENT环境变量加载对应配置文件:

  • 本地调试默认是Development环境,会加载appsettings.development.json
  • 发布后默认是Production环境,仅加载appsettings.json(若未添加appsettings.Production.json)

解决方法:

  • 方法一:运行时指定环境为Development:
dotnet D:\GitLocal/CrudMetrics/bin/Publish/CrudMetrics.Api.dll --urls "https://localhost:7279" --environment Development
  • 方法二:设置环境变量后运行:
    Windows:
    set ASPNETCORE_ENVIRONMENT=Development
    dotnet D:\GitLocal/CrudMetrics/bin/Publish/CrudMetrics.Api.dll --urls "https://localhost:7279"
    
    Linux/Mac:
    export ASPNETCORE_ENVIRONMENT=Development
    dotnet D:\GitLocal/CrudMetrics/bin/Publish/CrudMetrics.Api.dll --urls "https://localhost:7279"
    
  • 方法三:添加appsettings.Production.json并配置对应值,适配生产环境。

2. 配置文件未正确复制到发布目录

即使手动将配置文件放到发布目录,若项目文件未配置复制规则,后续发布可能覆盖丢失,或运行时无法识别。

解决方法:
修改项目.csproj文件,添加配置文件的复制规则:

<ItemGroup>
  <Content Include="appsettings.json">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>
  <Content Include="appsettings.development.json">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    <DependentUpon>appsettings.json</DependentUpon>
  </Content>
</ItemGroup>

重新执行发布命令,确保配置文件被正确复制到发布目录。

3. 配置文件命名或路径问题

  • 检查发布目录下的配置文件名是否拼写正确(Linux/Mac系统区分大小写)
  • 确保配置文件与dll文件处于同一级目录,而非子目录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:53:15