Asp.Net Core 5.0部署Linux后出现connectionString参数为空异常
问题解决步骤
报错核心原因是程序运行时读取不到
DefaultConnection对应的连接字符串,导致参数为空抛出异常,本地Windows环境正常是因为Windows环境的文件大小写、配置源、工作目录等规则和Linux不一致,可按以下步骤逐一排查:
- 检查配置文件大小写与完整性
Linux系统大小写敏感,首先确认部署目录下的配置文件名为全小写的appsettings.json,AppSettings.json、appSettings.json都无法被默认加载。同时检查JSON格式是否完整,你贴出的配置片段末尾缺少闭合的},JSON格式错误会导致配置节点读取失败。 - 排查配置源覆盖问题
你之前有过Azure部署历史,首先确认启动代码中是否残留AddAzureKeyVault、AddAzureAppConfiguration等Azure配置注入逻辑,这类配置源优先级默认高于本地appsettings.json,Linux环境下没有对应的Azure访问权限时,会导致连接字符串读取为空。
另外Asp.NET Core默认配置优先级从低到高为:appsettings.json→appsettings.{环境名}.json→ 环境变量 → 命令行参数,可检查当前运行环境的ASPNETCORE_ENVIRONMENT值,确认对应环境的配置文件中没有把DefaultConnection设为空,也可查看系统环境变量中是否存在ConnectionStrings__DefaultConnection的空值配置,高优先级配置会覆盖本地配置文件的有效值。 - 验证工作目录配置
如果使用systemd托管程序,打开对应的.service配置文件,确认WorkingDirectory参数指向的是appsettings.json所在的程序部署根目录,工作目录配置错误会导致程序找不到配置文件。如果是手动启动程序,确认启动时的当前目录是程序部署目录。 - 确认发布配置
检查本地项目中appsettings.json的文件属性,设置为如果较新则复制,确保发布打包时配置文件会被包含到输出目录中。 - 临时加日志定位
可在程序启动逻辑中添加临时日志输出Configuration.GetConnectionString("DefaultConnection")的实际值,确认是读取环节就为空还是后续业务代码处理时被置空。
内容的提问来源于stack exchange,提问作者Edenn
相关产品推荐
相关产品推荐

