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

Azure Function App使用System.Runtime.Caching内存缓存时程序集加载失败问题求助

解决Azure Functions中System.Runtime.Caching加载System.Configuration.ConfigurationManager失败的问题

你在基于.NET Core 3.1的Azure Functions v3环境中使用System.Runtime.Caching.MemoryCache时遇到的程序集加载错误,大概率是因为高版本依赖包与Functions运行环境的兼容性问题——虽然你已经安装了对应版本的System.Configuration.ConfigurationManager,但.NET Core 3.1的Functions运行时在加载5.0.0版本的程序集时存在上下文匹配问题。下面是几个可行的解决方案:

方案1:降低依赖包版本到适配.NET Core 3.1的稳定版

最直接的修复方式是把System.Runtime.Caching和System.Configuration.ConfigurationManager的版本降到4.7.0,这个版本是专门为.NET Core 3.1优化的,和Azure Functions v3环境兼容性更好。

修改你的csproj文件:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <AzureFunctionsVersion>v3</AzureFunctionsVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.11" />
    <PackageReference Include="System.Configuration.ConfigurationManager" Version="4.7.0" />
    <PackageReference Include="System.Runtime.Caching" Version="4.7.0" />
  </ItemGroup>
</Project>

修改后重新构建部署,就能解决加载问题。

方案2:添加程序集绑定重定向(若坚持使用5.0.0版本)

如果你一定要保留5.0.0版本的依赖包,可以通过绑定重定向让运行时正确定位程序集:

  1. 在项目根目录创建runtimeconfig.template.json文件,内容如下:
{
  "configProperties": {
    "assemblyBinding": {
      "dependencies": {
        "System.Configuration.ConfigurationManager": {
          "assemblyVersion": "5.0.0.0",
          "publicKeyToken": "cc7b13ffcd2ddd51"
        }
      }
    }
  }
}
  1. 同时在csproj中开启自动绑定重定向:
<PropertyGroup>
  <TargetFramework>netcoreapp3.1</TargetFramework>
  <AzureFunctionsVersion>v3</AzureFunctionsVersion>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

方案3:改用.NET Core原生的IMemoryCache(推荐)

更符合.NET Core和Azure Functions生态的做法是使用原生的IMemoryCache,它支持依赖注入,彻底避免System.Runtime.Caching带来的兼容性问题:

  1. 创建Startup类注册服务:
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;

[assembly: FunctionsStartup(typeof(YourFunctionAppNamespace.Startup))]
namespace YourFunctionAppNamespace
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            // 注册IMemoryCache服务
            builder.Services.AddMemoryCache();
        }
    }
}
  1. 修改Function类,通过构造函数注入IMemoryCache:
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.Logging;
using System.Threading.Tasks;

public class Function1
{
    private readonly IMemoryCache _memoryCache;

    // 通过构造函数注入IMemoryCache
    public Function1(IMemoryCache memoryCache)
    {
        _memoryCache = memoryCache;
    }

    [FunctionName("Function1")]
    public async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, ILogger log)
    {
        // 使用IMemoryCache缓存数据
        _memoryCache.Set("123", "123", new MemoryCacheEntryOptions 
        { 
            Priority = CacheItemPriority.Normal 
        });
        return new OkObjectResult("");
    }
}

这个方案不仅解决了当前的程序集加载问题,也更贴合Azure Functions的最佳实践,后续维护起来更顺畅。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:42:29