Функция Azure не связывает ILogger
Моя функция ссылается на сборку, которая ссылается на Microsoft.Extensions.Logging.Abstractions 2.0.0. Если я добавлю ссылку на эту версию к сборке функций, выполнение функции завершится неудачей:
[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)
Ответы
Ответ 1
Вероятно, что SDK привязан к версии X сборки ILogger, а ваш код пользователя привязан к версии Y. Механизм привязки тогда не распознает ваш тип параметра как тот же, поскольку они из разных сборок. (это может случиться и с любым другим типом).
Как правило, исправление заключается в следующем:
- См. Ссылки на самородок, используемые SDK
- Используйте эти существующие ссылки и не добавляйте одну и ту же DLL с другой версией.
Ответ 2
У меня тоже была какая-то ошибка, но именно эта версия пакета для Microsoft.EntityFrameworkCore.SqlServer вызвала проблему.
Понижение Microsoft.EntityFrameworkCore.SqlServer v2.2.0 до v2.1.4 сделало свое дело.
Я предполагаю, что существует несоответствие версий между библиотеками logging.abstractions для этого пакета.
Ответ 3
Для меня проблема заключалась в том, что мне нужно было явно объявить версию функций Azure в моем файле .csproj
.
Я добавил <AzureFunctionsVersion>v2</AzureFunctionsVersion>
после элемента <TargetFramework>
:
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<AzureFunctionsVersion>v2</AzureFunctionsVersion>
</PropertyGroup>
Надеюсь, что это поможет кому-то :-)
Ответ 4
Также обязательный порядок может вызвать этот сбой.
Изменение порядка параметров...
[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)
Ответ 5
Как заявил один из сотрудников MS, причиной может быть:
Мы пока еще не поддерживаем .NET Core 2.2, но у нас есть работа, которая должна начаться в январе.
https://github.com/Azure/azure-functions-host/issues/3854#issuecomment-449034719
Ответ 6
Еще одна причина той же ошибки...
Каким-то образом я закончил с оператором using, ссылающимся на Microsoft.Build.Framework
который имеет свою собственную версию ILogger, исправление которой состоит в том, чтобы просто заменить это на Microsoft.Extensions.Logging
которое ожидает приложение функций.
Ответ 7
Для меня я использовал пакет NuGet Microsoft.Extensions.Logging для проекта, на который ссылается моя функция Azure. Удалил этот пакет и моя ошибка (эта точная ошибка) ушла.
На самом деле мне не нужен пакет NuGet для использования ILogger в моей функции Azure.
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log)