You need to enable JavaScript to run this app. ASP.NET Core 3.1发布到Azure App Service时appsettings.json会同步到配置?
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 3.1发布到Azure App Service时appsettings.json会同步到配置?

核心结论

你遇到的配置项未自动出现在Azure App Service配置列表的情况,是默认机制下的正常表现,并非操作遗漏,你预期的配置自动流转流程本身和ASP.NET Core、Azure App Service的原生设计不匹配。

认知偏差澄清
  • ASP.NET Core的appsettings.json、appsettings.{EnvironmentName}.json是随项目发布打包到应用运行目录下的静态配置文件,属于应用自身的文件系统范畴。Azure App Service层面看到的「应用服务配置」面板,本质是给应用进程注入的环境变量源,两套配置系统从设计上就是完全独立的,发布流程没有任何内置逻辑会把本地json里的配置项自动同步到Azure的配置面板列表中,你预期的「appSettings.Env.json → 发布到App Service → 配置自动同步到面板」的流程,默认是不存在的。
  • 你对配置构建器的作用理解存在偏差:.NET Core的配置系统是多源按优先级叠加的,默认加载顺序为:基础appsettings.json → 环境对应的appsettings.{ASPNETCORE_ENVIRONMENT}.json → 应用进程环境变量(即Azure配置面板的内容),后加载的源的同名键会覆盖前面的值,并非配置构建器仅根据环境变量挑选对应的json文件加载。你提到的App Configuration相关的构建器逻辑,本质都是把对应的外部配置源加入到.NET Core的配置叠加链路里,并不会反向把本地json的配置推送到Azure平台的配置面板中。
Key Vault引用失效的根本原因

你用到的格式为@Microsoft.KeyVault(SecretUri=[KEY VAULT SECRET URL])的引用,解析逻辑是Azure App Service运行时层实现的:

  • 只有当这类格式的配置项存在于App Service配置面板、或是平台注入的环境变量中时,Azure运行时才会触发解析逻辑,用应用绑定的托管身份访问对应Key Vault拉取密钥,替换成实际的密钥值。
  • 如果这类引用仅写在随项目打包的appsettings.{env}.json中,应用读取到的只是一串纯文本字符串,没有任何运行时逻辑会主动识别解析这个字符串,自然不会触发托管身份的密钥拉取流程,这也是你当前无法获取密钥的核心原因。
可落地的实现方案
  • 低配置量场景:直接手动把appsettings.{env}.json中需要同步的配置项,逐一录入到Azure App Service的「应用服务配置」面板的应用设置项中,这是零额外开发成本的方案。
  • 高配置量场景:在发布流程(Azure DevOps/GitHub Actions/本地发布脚本)中增加自定义逻辑:读取本地appsettings.{env}.json的键值,通过Azure管理接口批量写入到对应App Service的应用配置中,避免手动逐项录入。
  • 无需依赖App Service面板解析的替代方案:直接在应用的Program.cs/Startup.cs的配置加载链路中,添加Azure Key Vault作为配置源,配置托管身份直接从Key Vault拉取密钥。这种场景下你可以把Key Vault的访问地址直接写在本地的appsettings.json中,由应用自身完成密钥拉取,不需要依赖Azure运行时的引用解析能力。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 02:45:06