如何将 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 上找到了一些与此相关的信息。我找到的建议是:
- 将“Microsoft.Extensions.Logging.Abstractions”降级到版本 3.1.0。我不能这样做,因为我有一个引用相同 NuGet 的第三方依赖项,但版本为 5.0.0.
- 升级到 .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 项目都没有出现错误。
- 在 .Net Core 3.1 和 6 中创建了两个 Azure Durable Functions 项目。
- 在 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 的最小示例并且它是 运行 成功。
我正在使用 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 上找到了一些与此相关的信息。我找到的建议是:
- 将“Microsoft.Extensions.Logging.Abstractions”降级到版本 3.1.0。我不能这样做,因为我有一个引用相同 NuGet 的第三方依赖项,但版本为 5.0.0.
- 升级到 .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 项目都没有出现错误。
- 在 .Net Core 3.1 和 6 中创建了两个 Azure Durable Functions 项目。
- 在 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 的最小示例并且它是 运行 成功。