无法将实体框架核心加载到 C# azure 函数中



我已经在Azure/azure-functions-host中打开了一个问题,并且我有一个带有重现步骤的存储库,但是我在这里发布此内容,以防万一我正在做的事情本质上存在问题,或者有人已经偶然发现了这个问题。

我的目标:我想在 azure 函数中运行一些代码,这些代码位于现有 Visual Studio 解决方案的类库中。

此代码碰巧使用实体框架核心来读取和写入 SQL Server 数据库。

在尝试隔离我面临的问题时,我最终遇到了以下情况:

重现步骤:

  1. 在Visual Studio中:>Azure Functions>新>项目

    的文件
  2. 选择Azure Functions v2 Preview (.NET Core)

  3. 选择Http trigger

  4. 选择Storage Emulator

  5. 选择访问权限Function

  6. 使用 nugetMicrosoft.EntityFrameworkCore版本2.0.2进行安装

  7. EFCore包中的任何内容添加调用

    就我而言,我添加了以下行:

    log.Info(typeof(DbContext).AssemblyQualifiedName);
    
  8. 确保 Azure 存储模拟器正在运行

  9. 从视觉工作室运行函数 (F5)

  10. 点击控制台中打印的网址

预期行为:除了示例Http trigger函数的默认行为外,我希望每次调用都打印以下行:

Microsoft.EntityFrameworkCore.DbContext, Microsoft.EntityFrameworkCore, Version=2.0.2.0, Culture=neutral, PublicKeyToken=adb9793829ddae60

实际行为:应用在运行时引发异常并输出以下内容

[11-四月-18 6:33:59 AM] 正在执行"函数 1"(原因="此函数是通过主机 API 以编程方式调用的。 ", id=6faabfd8-eb96-4d71-906c-940028a7978a)[11-四月-18 6:33:59 AM] 执行"函数 1


"(失败,id=6faabfd8-eb96-4d71-906c-940028a7978a)
[11-4月-18 6:33:59 AM] System.Private.CoreLib:执行函数时异常:函数 1。FunctionApp1:无法加载文件或程序集"Microsoft.EntityFrameworkCore,版本=2.0.2.0,区域性=中性,公钥令牌=adb9793829ddae60"。找不到或加载特定文件。(HRESULT的例外:0x80131621)。System.Private.CoreLib:无法加载文件或程序集"Microsoft.EntityFrameworkCore, version=2.0.2.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'。

目前的猜想:在研究这个问题时,我发现了一些可能相关的东西:

Azure 函数运行时已有一组可用的包,其中一个包在特定版本中Newtonsoft.Json。如果从项目中引用了较新版本的Newtonsoft.Json,则会观察到类似的行为。

这是一个StackOverflow问题。 这是一个 github 问题

解决办法:对于Microsoft.EntityFrameworkCore回滚到版本 2.0.1。不知道这是否是已知的EFCore问题,但是回滚到2.0.1有助于解决完全相同的问题。

最新更新