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

Azure Function V3运行报错:无法加载Microsoft.Extensions.DependencyModel 3.1.6.0程序集

问题根因

Azure Functions V3 进程内运行时采用了依赖隔离机制,会优先加载宿主环境自带的程序集,即使项目中显式引用了Microsoft.Extensions.DependencyModel包,生成阶段也可能被运行时的清理逻辑移除,或者运行时优先寻找宿主目录下的对应版本,找不到就抛出文件找不到异常。

可行修复方案

方案1:配置项目保留依赖包

  1. 在Function项目中显式安装对应版本的NuGet包:
Install-Package Microsoft.Extensions.DependencyModel -Version 3.1.6
  1. 打开项目的.csproj文件,在PropertyGroup节点中添加以下两行配置:
<PropertyGroup>
    <!-- 原有配置保持不变 -->
    <_FunctionsSkipCleanOutput>true</_FunctionsSkipCleanOutput>
    <FunctionsPreservedDependencies Include="Microsoft.Extensions.DependencyModel.dll" />
</PropertyGroup>
  • _FunctionsSkipCleanOutput 会跳过Functions生成时的多余依赖清理逻辑,确保你引用的包被完整复制到输出目录
  • FunctionsPreservedDependencies 会告知运行时优先加载你项目中自带的对应程序集,不使用宿主自带的版本

方案2:绕开DependencyContext依赖(更稳定)

直接放弃使用DependencyContext获取程序集,改用遍历当前运行目录的dll文件加载,从根源上规避对该包的依赖,代码示例如下:

// 获取当前程序集运行目录
var runDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
// 加载目录下所有业务相关的dll
var allAssemblies = Directory.EnumerateFiles(runDir, "*.dll")
    // 可根据需要过滤系统程序集,减少不必要的加载
    .Where(file => !Path.GetFileName(file).StartsWith("Microsoft.") 
                && !Path.GetFileName(file).StartsWith("System."))
    .Select(Assembly.LoadFrom)
    .ToList();

// 后续遍历allAssemblies即可获取你需要的类型,注册到ServiceCollection

方案3:本地调试临时修复

如果仅本地调试出现问题,发布到Azure环境后运行正常,可以在local.settings.json的Values节点中添加配置:

{
  "Values": {
    // 原有配置保持不变
    "WEBSITE_LOAD_USER_APPLICATION_DEPENDENCIES": "1"
  }
}

该配置会强制本地运行时优先加载用户项目中自带的依赖包。

注意事项
  • 开启_FunctionsSkipCleanOutput后生成的输出包体积会有所增大,属于正常现象
  • 使用遍历dll的方案时,可根据自己的业务需求调整过滤规则,避免加载不需要的第三方程序集

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:15:04