Функция 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. Механизм привязки тогда не распознает ваш тип параметра как тот же, поскольку они из разных сборок. (это может случиться и с любым другим типом).

Как правило, исправление заключается в следующем:

  1. См. Ссылки на самородок, используемые SDK
  2. Используйте эти существующие ссылки и не добавляйте одну и ту же 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)

Ответ 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)