.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>注入到业务代码中。
发布与运行步骤
- 执行发布命令:
dotnet publish -c Release -o ./bin/Publish
- 运行发布后的程序:
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:
Linux/Mac:set ASPNETCORE_ENVIRONMENT=Development dotnet D:\GitLocal/CrudMetrics/bin/Publish/CrudMetrics.Api.dll --urls "https://localhost:7279"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
相关产品推荐
相关产品推荐

