我的函数引用了一个引用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:不能 绑定参数' log'输入ILogger。确保参数Type为 由绑定支持。如果您正在使用绑定扩展程序(例如 ServiceBus,计时器等)确保您已注册 启动代码中的扩展方法(例如 config.UseServiceBus(),config.UseTimers()等。)。
是否可以在Azure功能中使用较新的记录器? (SDK 1.0.7)
答案 0 :(得分:17)
可能发生的事情是SDK绑定到ILogger程序集的X版本,并且您的用户代码绑定到版本Y.然后绑定引擎无法将您的参数类型识别为相同,因为它们来自不同的集会。 (这也可能发生在任何其他类型)。
一般来说,解决方法是:
答案 1 :(得分:7)
我也有同样的错误,但是导致问题的是Microsoft.EntityFrameworkCore.SqlServer的软件包版本。
可以将Microsoft.EntityFrameworkCore.SqlServer v2.2.0降级到v2.1.4。
我认为此软件包的logging.abstractions库之间版本不匹配。
答案 2 :(得分:4)
对我来说,问题在于我需要在.csproj
文件中明确声明Azure Functions版本。
我在<AzureFunctionsVersion>v2</AzureFunctionsVersion>
元素后添加了<TargetFramework>
:
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<AzureFunctionsVersion>v2</AzureFunctionsVersion>
</PropertyGroup>
希望可以帮助某人:-)
答案 3 :(得分:2)
绑定顺序也可能导致此失败。
从参数顺序更改...
[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)
答案 4 :(得分:2)
对于我来说,我在使用Azure函数引用的项目上使用了NuGet包Microsoft.Extensions.Logging。卸载了此软件包,我的错误(确切的错误)消失了。 我实际上并不需要NuGet包在Azure函数中使用ILogger。
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log)
答案 5 :(得分:1)
如一位MS员工所述,原因可能是:
我们还不支持.NET Core 2.2,但是我们正在进行中,应该在1月份发布。
https://github.com/Azure/azure-functions-host/issues/3854#issuecomment-449034719
答案 6 :(得分:0)
同一错误的另一个原因...
不知何故,我最终得到了一个引用# results with 100 rows
%timeit original()
#100 loops, best of 3: 7 ms per loop
%timeit WeNYoBen()
#100 loops, best of 3: 2.4 ms per loop
%timeit jezrael()
#100 loops, best of 3: 4.03 ms per loop
%timeit piRSquared()
#100 loops, best of 3: 2.29 ms per loop
# results with 10000 rows
%timeit original()
#100 loops, best of 3: 16.6 ms per loop
%timeit WeNYoBen()
#10 loops, best of 3: 23 ms per loop
%timeit jezrael()
#100 loops, best of 3: 6.14 ms per loop
%timeit piRSquared()
#100 loops, best of 3: 19.1 ms per loop
的using语句,该语句具有自己的ILogger版本,该修补程序只是将其替换为功能应用程序期望的Microsoft.Build.Framework
答案 7 :(得分:0)
将Azure 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 runtime versions overview
答案 8 :(得分:0)
我不得不从解决方案中卸载 Microsoft.Extensions.Logging nuget 包。
答案 9 :(得分:0)
在自动更新我的 Nuget 包后,我突然开始收到 ILogger 绑定错误。
我在我的解决方案文件中找不到任何对 ILogger 扩展的显式引用。结果证明罪魁祸首是一个不同的扩展Microsoft.Extensions.Caching.Memory,它更新到了 v5.00 (.NET 5?)。将该包降级到之前的版本 3.1.15 修复了错误(我最初是 v3.1.4)。我想知道是否有任何 v5.x 扩展包会触发此问题。