无法通过 Azure Function App 使用内存缓存

问题描述

我创建了带有 Http 触发器的 Azure Function App,因为我想使用 system.runtime 命名空间中的内存缓存来缓存令牌。但是当我运行应用程序时,它会抛出错误 " System.Runtime.Caching: Could not load file or assembly 'System.Configuration.ConfigurationManager,Version=5.0.0.0,Culture=neutral,PublicKeyToken=cc7b13ffcd2ddd51'. The system cannot find the file specified."

我已确保在项目中安装了确切的版本。这是 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="5.0.0" />
    <packagereference Include="System.Runtime.Caching" Version="5.0.0" />
  </ItemGroup>
  <ItemGroup>

这是我遇到问题的代码的最低版本。

public static class Function1
    {
        public static MemoryCache accesstokenCache = new MemoryCache("accesstoken");
        [FunctionName("Function1")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function,"get","post",Route = null)] HttpRequest req,ILogger log)
        {
            accesstokenCache.Add("123","123",new CacheItemPolicy() { Priority = CacheItemPriority.Default });

            return new OkObjectResult("");
        }
    }

解决方法

以上代码适用于 system.runtime.caching nuget 版本 4.7.0。我现在已经降级以使其正常工作。

我也在github上发布了这个问题以供进一步跟进。 https://github.com/Azure/Azure-Functions/issues/1867

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...