web-dev-qa-db-ja.com

Azure FunctionがILoggerのバインドに失敗する

私の機能は、Microsoft.Extensions.Logging.Abstractions 2.0.0を参照するアセンブリを参照しています。そのバージョンへの参照を関数のアセンブリに追加すると、関数の実行は次のように失敗します:

[2018年1月25日11:14:46 PM] Microsoft.Azure.WebJobs.Host:インデックス作成メソッド「TrainingFunction.Run」のエラー。 Microsoft.Azure.WebJobs.Host:パラメーター 'log'をILogger型にバインドできません。パラメーターTypeがバインディングでサポートされていることを確認してください。バインディング拡張機能(ServiceBus、Timersなど)を使用している場合は、スタートアップコードで拡張機能の登録メソッドを呼び出していることを確認してください(config.UseServiceBus()、config.UseTimers()など) 。)。

Azure関数で新しいロガーを使用することは可能ですか? (SDK 1.0.7)

16
RA.

おそらく起こっているのは、SDKがILoggerアセンブリのバージョンXにバインドし、ユーザーコードがバージョンYにバインドしていることです。バインディングエンジンは、異なるアセンブリからのものであるため、パラメーターのタイプが同じであると認識しません。 (これは他のタイプでも発生する可能性があります)。

通常、修正は次のとおりです。

  1. SDKで使用されるナゲットリファレンスを参照してください
  2. これらの既存の参照を使用し、異なるバージョンの同じDLLを追加しないでください。
17
Mike S

私は何とか同じエラーを抱えていましたが、問題の原因はMicrosoft.EntityFrameworkCore.SqlServerのパッケージバージョンでした。

Microsoft.EntityFrameworkCore.SqlServer v2.2.0をv2.1.4にダウングレードするとうまくいきました。

このパッケージのlogging.abstractionsライブラリ間にバージョンの不一致があると思います。

7
Batu

私にとっての問題は、.csprojファイル。

追加した <AzureFunctionsVersion>v2</AzureFunctionsVersion> 後に <TargetFramework>要素:

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

それが誰かを助けることを願っています:-)

4
infl3x

また、バインディング順がこの障害の原因になる可能性があります。

パラメーターの順序から変更する...

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

2
toralux

MSの従業員の1人が述べたように、原因は次のとおりです。

まだ.NET Core 2.2をサポートしていませんが、作業は進行中であり、1月に出荷される予定です。

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

1
Neil

私にとっては、Azure関数が参照するプロジェクトでNuGetパッケージMicrosoft.Extensions.Loggingを使用していました。このパッケージをアンインストールすると、エラー(この正確なエラー)はなくなりました。 Azure関数でILoggerを使用するのに、実際にはNuGetパッケージは必要ありませんでした。

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