0

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

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

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

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

有没有办法解决这个问题?

更新:我创建了一个可以重现问题的最小示例。它位于这里。分支功能/WithLogging3按预期运行,但功能/WithLogging5失败并显示消息“'主机尚未启动”。如果我启用使用公共语言运行时异常中断调试器的选项,我会收到错误消息“无法加载文件或程序集'Microsoft.Extensions.Logging.Abstractions,版本 = 5.0.0.0,文化 = 中性,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(以及方法中使用记录器的行),则项目运行良好。但是,我需要使用记录器。

我知道我提供的示例不包含持久函数,但它重现了该问题,即使您将持久函数添加到项目中,或者将当前函数替换为需要注入的持久函数,它也会重现记录仪。

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

4

1 回答 1

1

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

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

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

并一一执行功能,如下输出所示,运行成功:

Azure 持久功能 .Net Core 3.1 在此处输入图像描述

Azure 持久功能 .Net Core 6 在此处输入图像描述

更新答案:

Microsoft.Extensions.Logging.Abstractions版本5.0.0已添加到提供给 Azure 函数的最小示例中,并且它正在成功运行。 在此处输入图像描述

在此处输入图像描述

于 2021-12-30T08:07:12.357 回答