29

我的函数引用了一个引用 Microsoft.Extensions.Logging.Abstractions 2.0.0 的程序集。如果我将对该版本的 nuget 引用添加到函数的程序集中,则函数执行将失败,并显示:

[1/25/2018 11:14:46 PM] Microsoft.Azure.WebJobs.Host:错误索引方法“TrainingFunction.Run”。Microsoft.Azure.WebJobs.Host:无法将参数“日志”绑定到 ILogger 类型。确保绑定支持参数类型。如果您正在使用绑定扩展(例如 ServiceBus、Timers 等),请确保您已在启动代码中调用了扩展的注册方法(例如 config.UseServiceBus()、config.UseTimers() 等.)。

是否可以在 Azure 函数中使用较新的记录器?(SDK 1.0.7)

4

11 回答 11

31

可能发生的情况是 SDK 绑定到 ILogger 程序集的版本 X,而您的用户代码绑定到版本 Y。然后绑定引擎不会将您的参数类型识别为相同,因为它们来自不同的程序集。(这也可能发生在任何其他类型上)。

一般来说,解决方法是:

  1. 查看 SDK 使用的块引用
  2. 使用那些现有的引用,不要添加具有不同版本的相同 dll。
于 2018-01-26T01:48:20.783 回答
11

我不知何故也遇到了同样的错误,但这是导致问题的 Microsoft.EntityFrameworkCore.SqlServer 的包版本。

将 Microsoft.EntityFrameworkCore.SqlServer v2.2.0 降级到 v2.1.4 就可以了。

我假设此包的 logging.abstractions 库之间存在版本不匹配。

于 2018-12-17T15:44:45.050 回答
4

对我来说,问题是我需要在我的.csproj文件中明确声明 Azure Functions 版本。

<AzureFunctionsVersion>v2</AzureFunctionsVersion><TargetFramework>元素之后添加:

<PropertyGroup>
   <TargetFramework>netstandard2.0</TargetFramework>
   <AzureFunctionsVersion>v2</AzureFunctionsVersion>
</PropertyGroup>

希望对某人有所帮助:-)

于 2018-10-11T03:30:23.890 回答
3

绑定顺序也可能导致此失败。

从参数顺序更改...

     [FunctionName("SomeFunction")]
     public static async Task Run([BlobTrigger("path", Connection = "conn")]
        ILogger logger, ExecutionContext context, Stream stream, string name) {}

... 到 ...

     [FunctionName("SomeFunction")]
     public static async Task Run([BlobTrigger("path", Connection = "conn")]
        Stream stream, string name, ILogger logger, ExecutionContext context) {}

...解决了我的问题。(Microsoft.NET.Sdk.Functions v1.0.24)

于 2018-12-13T08:34:55.380 回答
3

对我来说,我在我的 Azure 函数引用的项目上使用 NuGet 包 Microsoft.Extensions.Logging。卸载了这个包,我的错误(这个确切的错误)消失了。我实际上并不需要 NuGet 包来在我的 Azure 函数中使用 ILogger。

 [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)

编辑:降级到 Microsoft.Extensions.Http 2.1.0 也可以解决此错误的另一次发生。如果您仍然需要 Extensions 包(例如,对于IHttpClientFactory),则可能会因为 SDK 版本与 3.1.1 冲突而出现此日志记录错误。

于 2019-09-17T17:16:04.113 回答
1

正如一位 MS 员工所说,原因可能是:

我们还不完全支持 .NET Core 2.2,但我们正在进行这项工作,应该会在一月份发布。

https://github.com/Azure/azure-functions-host/issues/3854#issuecomment-449034719

于 2019-01-04T03:45:56.750 回答
0

同样错误的另一个原因......

不知何故,我最终得到了一个 using 语句引用Microsoft.Build.Framework,它有自己的 ILogger 版本,修复只是用Microsoft.Extensions.Logging函数应用程序期望的替换它

于 2019-05-16T14:08:36.853 回答
0

将 Azure Functions/Durable Functions 从 v2 更新到 v3 时也会发生这种情况。您需要手动编辑 .csproj 以解决 ILogger 引用问题。

<PropertyGroup>
  <TargetFramework>netcoreapp3.1</TargetFramework>
  <AzureFunctionsVersion>v3</AzureFunctionsVersion>   
</PropertyGroup>
<ItemGroup>
    ...
   <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.2" />
</ItemGroup>

该函数将继续报告运行时模块错误。然后,您必须尝试在 Visual Studio 中创建新的 Azure Function v3 项目以下载运行时模块的模板。官方文档中提供了有关该过程的更多信息:Azure Functions 运行时版本概述

于 2020-01-25T19:35:46.557 回答
0

我不得不从解决方案中卸载Microsoft.Extensions.Logging nuget 包。

于 2021-04-05T09:15:07.450 回答
0

在自动更新我的 Nuget 包后,我突然开始收到 ILogger 绑定错误。

我在我的解决方案文件中找不到对 ILogger 扩展的任何显式引用。原来罪魁祸首是一个不同的扩展Microsoft.Extensions.Caching.Memory更新到 v5.00(.NET 5?)。将该包降级到以前的版本 3.1.15 修复了该错误(我最初使用的是 v3.1.4)。我想知道是否有任何 v5.x 扩展包会触发这个问题。

于 2021-05-13T23:05:32.110 回答
0

对我有用的是将 "Microsoft.Extensions.Http" 从版本 5.xxx 降级为 "3.1.20",这隐含地将 "Microsoft.Extensions.Logging" 降级为 "3.1.20"

看起来 Http 库的 5.x 版本和“Microsoft.Extensions.Logging” 5.x 版本存在隐式依赖关系,并且该版本的日志记录存在一些问题。

于 2021-11-05T15:11:49.027 回答