Azure Function加载System.Configuration.ConfigurationManager报错
问题现象
项目运行环境为 .NET Core 3.1,项目引用了 System.Runtime.Caching 库,该库依赖 System.Configuration.ConfigurationManager。运行时出现差异表现:
- 同为.NET Core 3.1框架的MS单元测试项目中,相关代码运行正常
- 同框架版本的Azure Function项目运行时抛出如下异常:
未能加载文件或程序集“System.Configuration.ConfigurationManager, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51”。系统找不到指定的文件。
经排查,项目的 .deps.json 文件中已存在对应依赖配置,相关依赖配置截图、堆栈追踪信息见对应附图。
根因说明
Azure Function 宿主默认采用独立的运行时程序集加载策略,会优先从运行时自带的全局存储中加载系统类库,不会默认探测项目输出目录下的高版本系统程序集;单元测试项目走标准.NET Core 控制台的程序集探测逻辑,可正常加载输出目录下的对应依赖,因此出现单测正常、Function运行报错的差异。
该问题的核心触发点是项目传递依赖拉取了6.0.0版本的System.Configuration.ConfigurationManager,该版本不属于.NET Core 3.1运行时的默认自带库版本,且未被显式纳入Function的部署输出文件列表,导致加载失败。
修复方案
按优先级从高到低可选择以下方案:
- 显式安装对应版本NuGet包
直接在Azure Function项目中手动安装System.Configuration.ConfigurationManager6.0.0版本,不依赖传递引入的依赖,重新编译发布后确认输出目录存在对应版本的System.Configuration.ConfigurationManager.dll即可。 - 修改项目配置保留输出依赖
右键编辑Azure Function项目的.csproj文件,在顶层<PropertyGroup>节点中添加如下配置,关闭Function构建时的依赖清理逻辑,确保所有传递依赖都被复制到输出目录:<_FunctionsSkipCleanOutput>true</_FunctionsSkipCleanOutput> - 对齐依赖版本到运行时基线
将System.Runtime.Caching及关联的System.Configuration.ConfigurationManager降级到适配.NET Core 3.1的4.x稳定版本,和Azure Function运行时自带的系统库版本对齐,从根源上消除高版本依赖加载需求。
内容的提问来源于stack exchange,提问作者time_flies
相关产品推荐
相关产品推荐

