web-dev-qa-db-fra.com

Azure Function ne parvient pas à se lier à ILogger

Ma fonction fait référence à un assembly qui fait référence à Microsoft.Extensions.Logging.Abstractions 2.0.0. Si j'ajoute une référence de nuget à cette version à l'assembly de la fonction, l'exécution de la fonction échoue avec:

[25/01/2018 11:14:46] Microsoft.Azure.WebJobs.Host: erreur d'indexation méthode 'TrainingFunction.Run'. Microsoft.Azure.WebJobs.Host: impossible lie le paramètre 'log' à ILogger. Assurez-vous que le paramètre Type est pris en charge par la liaison. Si vous utilisez des extensions de liaison (par exemple ServiceBus, Timers, etc.), assurez-vous que vous avez appelé l'enregistrement méthode pour les extensions de votre code de démarrage (par exemple, . config.UseServiceBus (), config.UseTimers (), etc.).

Est-il possible d'utiliser le nouvel enregistreur dans les fonctions Azure? .__ (SDK 1.0.7)

14
RA.

Il est probable que le SDK lie la version X de l'assembly ILogger et que votre code utilisateur est lié à la version Y. Le moteur de liaison ne reconnaît alors pas le type de vos paramètres comme étant les mêmes, car ils proviennent d'assemblages différents. (Cela peut arriver avec tout autre type aussi). 

Généralement, le correctif consiste à:

  1. Voir les références de nugget utilisées par le SDK 
  2. Utilisez ces références existantes et n'ajoutez pas la même DLL avec une version différente. 
16
Mike S

J'avais aussi la même erreur mais c'était la version du paquet pour Microsoft.EntityFrameworkCore.SqlServer qui était à l'origine du problème.

Le déclassement de Microsoft.EntityFrameworkCore.SqlServer v2.2.0 à v2.1.4 a fait l'affaire.

Je suppose qu'il existe une incompatibilité de version entre les bibliothèques logging.abstractions pour ce package.

7
Batu

Pour moi, le problème était que je devais déclarer explicitement la version Azure Functions dans mon fichier .csproj.

J'ai ajouté <AzureFunctionsVersion>v2</AzureFunctionsVersion> après l'élément <TargetFramework>:

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

J'espère que ça aide quelqu'un :-)

4
infl3x

Un ordre de liaison pourrait également causer cet échec. 

Modification de l'ordre des paramètres ...

     [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) {}

... corrigé mon problème. (Microsoft.NET.Sdk.Functions v1.0.24)

1
toralux

Comme l’a déclaré un des employés de MS, la cause pourrait être:

nous ne prenons pas encore en charge .NET Core 2.2, mais le travail est en cours et devrait être disponible en janvier. 

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

1
Neil