如何将 Microsoft.Extensions.Logging.Abstraction 5.0.0 与 Azure Durable Functions 一起使用

How to use Microsoft.Extensions.Logging.Abstraction 5.0.0 with Azure Durable Functions

我正在使用 Azure Functions,我遇到了一个涉及 NuGet“Microsoft.Extensions.Logging.Abstractions”的问题。我的解决方案 运行ning 非常好,但最近我添加了一个依赖于“Microsoft.Extensions.Logging.Abstractions 5.0.0”的依赖项。该项目构建良好,但当我 运行 它时。出现以下错误:“无法加载文件或程序集‘Microsoft.Extensions.Logging.Abstractions,版本=5.0.0.0”。

我在 Github issue 上找到了一些与此相关的信息。我找到的建议是:

  1. 将“Microsoft.Extensions.Logging.Abstractions”降级到版本 3.1.0。我不能这样做,因为我有一个引用相同 NuGet 的第三方依赖项,但版本为 5.0.0.
  2. 升级到 .NET 5.0。我不能这样做,因为我需要使用 Durable Functions,而 .NET 5.0 的 Azure Functions 尚不支持这些功能。

我也尝试使用同一个 NuGet 的多个版本,但我遇到了同样的错误(我尝试了此 link 中提到的方法)。

有什么办法可以解决这个问题吗?

更新: 我创建了一个可以重现问题的最小示例。它位于 here。分支 feature/WithLogging3 运行s 符合预期,但 feature/WithLogging5 失败并显示消息“'The主机尚未启动”。如果启用使用公共语言运行时异常中断调试器的选项,我会收到错误“无法加载文件或程序集 'Microsoft.Extensions.Logging.Abstractions, Version=5.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'。系统找不到指定的文件”。

似乎只有在函数中注入ILogger时项目才会失败。例如,这个(直接取自 Visual Studio 2019 Template for Azure Functions with .NET Core 3.1):

[FunctionName("Function1")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
    ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");

        string name = req.Query["name"];

        string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
        dynamic data = JsonConvert.DeserializeObject(requestBody);
        name = name ?? data?.name;

        string responseMessage = string.IsNullOrEmpty(name)
            ? "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
            : $"Hello, {name}. This HTTP triggered function executed successfully.";

        return new OkObjectResult(responseMessage);
    }

如果我删除注入的 ILogger(以及方法中使用记录器的行),那么项目 运行 没问题。但是,我需要使用记录器。

我知道我提供的示例不包含 Durable Function,但它重现了问题,即使您向项目添加 Durable Function,或者将当前函数替换为 Durable,它也会重现采用注入 ILogger 的函数。

顺便说一句,如果它有任何变化,我使用的是 Visual Studio 2019(企业版)。

我尝试重现该问题,因为在通过以下步骤安装包 Microsoft.Extensions.Logging.Abstractions 版本 5.0.0 时,.Net Core 3.1 和 6 版本的 Azure Durable Functions 项目都没有出现错误。

  1. 在 .Net Core 3.1 和 6 中创建了两个 Azure Durable Functions 项目。
  2. 在 VS Code 项目的终端中使用 dotnet core CLI command 添加包 Microsoft.Extensions.Logging.Abstractions 版本 5.0.0

dotnet add package Microsoft.Extensions.Logging.Abstractions --version 5.0.0

并一一执行函数,如下输出显示运行成功:

Azure 持久函数 .Net Core 3.1

Azure Durable Functions .Net Core 6

更新答案:

Microsoft.Extensions.Logging.Abstractions 版本 5.0.0 添加到提供给 Azure Functions 的最小示例并且它是 运行 成功。