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

.NET 8迁移:System.Configuration.ConfigurationManager无法读取Azure App Service配置

原因分析与解决方案

核心差异:配置系统的底层逻辑不同

在.NET Framework中,ConfigurationManager.AppSettings的行为和IIS宿主深度绑定:

  • 当你把.NET Framework应用部署到Azure App Service时,App Service的应用设置/连接字符串会被IIS自动转换成以APPSETTING_(应用设置)、SQLAZURECONNSTR_(SQL连接字符串)等为前缀的环境变量。
  • .NET Framework的ConfigurationManager会自动优先读取这些环境变量的值,覆盖app.config里的同名配置项——这是.NET Framework配置系统和宿主集成的原生特性。

而你在.NET 8中使用的System.Configuration.ConfigurationManager NuGet包,本质是兼容层组件:

  • 它只是为了让旧代码能继续调用ConfigurationManager的API,底层仅读取本地的app.config文件,并没有和.NET 8的现代配置系统(或者Azure App Service的环境变量注入逻辑)做集成。
  • 这个兼容包没有实现.NET Framework那种自动读取宿主环境变量并覆盖本地配置的逻辑,所以自然读不到Azure App Service上的配置。

实现.NET Framework兼容行为的方案

如果你不想切换到IConfiguration,可以在应用启动时手动读取Azure App Service注入的环境变量,将其同步到ConfigurationManager.AppSettings中,实现同名键优先取Azure端值的效果:

using System;
using System.Configuration;

// 在应用启动的入口处执行(比如Program.cs的顶部)
foreach (var envVar in Environment.GetEnvironmentVariables())
{
    var key = envVar.Key.ToString();
    
    // 处理应用设置:Azure App Service会给应用设置加上APPSETTING_前缀
    if (key.StartsWith("APPSETTING_", StringComparison.OrdinalIgnoreCase))
    {
        var appSettingKey = key.Substring("APPSETTING_".Length);
        // 覆盖本地配置,Azure端值优先
        ConfigurationManager.AppSettings[appSettingKey] = envVar.Value.ToString();
    }
    
    // 如果需要处理连接字符串,可添加类似逻辑:
    // if (key.StartsWith("SQLAZURECONNSTR_", StringComparison.OrdinalIgnoreCase))
    // {
    //     var connStrKey = key.Substring("SQLAZURECONNSTR_".Length);
    //     ConfigurationManager.ConnectionStrings[connStrKey] = new ConnectionStringSettings(connStrKey, envVar.Value.ToString());
    // }
}

这段代码的逻辑是:

  1. 遍历所有环境变量
  2. 识别Azure App Service注入的应用设置(前缀APPSETTING_)
  3. 将去掉前缀的键值对写入ConfigurationManager.AppSettings,覆盖本地app.config的同名项

这样就能和.NET Framework下的行为完全一致了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:52:18