web-dev-qa-db-de.com

Azure-Funktion kann ILogger nicht binden

Meine Funktion verweist auf eine Assembly, die auf Microsoft.Extensions.Logging.Abstractions 2.0.0 verweist. Wenn ich der Assembly der Funktion einen Nuget-Verweis auf diese Version hinzufüge, schlägt die Funktionsausführung fehl mit:

[1/25/2018 11:14:46 PM] Microsoft.Azure.WebJobs.Host: Fehler beim Indizieren Methode 'TrainingFunction.Run'. Microsoft.Azure.WebJobs.Host: Kann nicht Binden Sie den Parameter 'log' an den Typ ILogger. Stellen Sie sicher, dass der Parameter Type .__ ist. unterstützt durch die Bindung. Wenn Sie Bindungserweiterungen verwenden (z. B. . ServiceBus, Zeitgeber usw.), vergewissern Sie sich, dass Sie die Registrierung aufgerufen haben Methode für die Erweiterung (en) in Ihrem Startcode (z. B. . config.UseServiceBus (), config.UseTimers () usw.).

Kann der neuere Logger in Azure-Funktionen verwendet werden? (SDK 1.0.7)

14
RA.

Wahrscheinlich passiert das SDK an Version X der ILogger-Assembly und Ihr Benutzercode ist an Version Y gebunden. Die Bindungs-Engine erkennt dann den Typ Ihres Parameters nicht als identisch, da er aus verschiedenen Assemblys stammt. (Dies kann auch bei jedem anderen Typ passieren). 

Im Allgemeinen ist das Problem zu beheben:

  1. Siehe die Nugget-Referenzen, die vom SDK verwendet werden 
  2. Verwenden Sie diese vorhandenen Verweise und fügen Sie nicht dieselbe DLL mit einer anderen Version hinzu. 
16
Mike S

Ich hatte irgendwie auch den gleichen Fehler, aber es war die Paketversion für Microsoft.EntityFrameworkCore.SqlServer, die das Problem verursacht.

Der Abstieg von Microsoft.EntityFrameworkCore.SqlServer v2.2.0 auf v2.1.4 hat den Trick geleistet.

Ich gehe davon aus, dass zwischen den logging.abstractions-Bibliotheken für dieses Paket ein Versionskonflikt besteht.

7
Batu

Für mich bestand das Problem darin, dass ich die Azure Functions-Version in meiner .csproj-Datei explizit deklarieren musste.

Ich habe <AzureFunctionsVersion>v2</AzureFunctionsVersion> nach dem <TargetFramework>-Element hinzugefügt:

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

Hoffe das hilft jemandem :-)

4
infl3x

Auch die Bindungsreihenfolge könnte diesen Fehler verursachen. 

Ändern von Parameterreihenfolge ...

     [FunctionName("SomeFunction")]
     public static async Task Run([BlobTrigger("path", Connection = "conn")]
        ILogger logger, ExecutionContext context, Stream stream, string name) {}

... um ...

     [FunctionName("SomeFunction")]
     public static async Task Run([BlobTrigger("path", Connection = "conn")]
        Stream stream, string name, ILogger logger, ExecutionContext context) {}

... mein Problem behoben. (Microsoft.NET.Sdk.Functions v1.0.24)

1
toralux

Wie von einem MS-Mitarbeiter festgestellt, könnte dies folgende Ursachen haben:

wir unterstützen .NET Core 2.2 noch nicht ganz, aber wir haben die Arbeit im Gange und sollten im Januar ausgeliefert werden. 

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

1
Neil

Ein weiterer Grund für den gleichen Fehler ...

Irgendwie endete ich mit einer using-Anweisung, die auf Microsoft.Build.Framework Verweist und eine eigene Version von ILogger hat. Der Fix besteht nur darin, diese durch Microsoft.Extensions.Logging Zu ersetzen, die die App für Funktionen erwartet

0
SimonF

Für mich verwendete ich das NuGet-Paket Microsoft.Extensions.Logging für ein Projekt, auf das meine Azure-Funktion verweist. Deinstallierte dieses Paket und mein Fehler (genau dieser Fehler) ging weg. Ich brauchte das NuGet-Paket nicht, um ILogger in meiner Azure-Funktion zu verwenden.

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