发布到Azure后,无法绑定函数参数以键入TraceWriter

时间:2017-12-12 03:32:48

标签: azure f# azure-functions

我遵循指南https://mikhail.io/2017/12/precompiled-azure-functions-in-fsharp/

  1. 创建了dotnet f#project:dotnet new classlib --language F# --name HelloFunctions
  2. 添加了对函数的引用:dotnet add package Microsoft.NET.Sdk.Functions
  3. 添加了一个新功能,如下面的文件Library.fs中所述,添加了配置文件等。
  4. 编译功能
  5. 使用dotnet build && dotnet publish && cd bin/Debug/netstandard2.0/publish && func start在本地成功启动。
  6. 将其发布到Azure:func azure functionapp publish <name>
  7. Azure看到了这个功能,没关系。
  8. 当我通过在树中单击其名称导航到函数时,弹出错误:

    Function ($Hello) Error: Microsoft.Azure.WebJobs.Host:
    Error indexing method 'Functions.Hello'. Microsoft.Azure.WebJobs.Host:
    Cannot bind parameter 'log' to type TraceWriter. Make sure the parameter Type
    is supported by the binding. If you're using binding extensions (e.g.
    ServiceBus, Timers, etc.) make sure you've called the 
    registration method for the extension(s) in your startup code (e.g.
    config.UseServiceBus(), config.UseTimers(), etc.).
    
  9. 该功能似乎不起作用。也许是因为上面的错误。
  10. Library.fs

    namespace HelloFunctions
    
    open System
    open Microsoft.Azure.WebJobs
    open Microsoft.Azure.WebJobs.Host
    
    module Say =
    let private daysUntil (d: DateTime) =
        (d - DateTime.Now).TotalDays |> int
    
    let hello (timer: TimerInfo, log: TraceWriter) =
        let christmas = new DateTime(2017, 12, 25)
    
        daysUntil christmas
        |> sprintf "%d days until Christmas"
        |> log.Info
    

1 个答案:

答案 0 :(得分:4)

听起来非常像汇编版本冲突(运行时运行Microsoft.Azure.WebJobs.Host.dll的一个版本,而您的应用引用另一个版本)。

我的猜测是您使用运行时版本2.0编译本地应用程序,而Azure功能应用程序配置为1.0(默认值)。请检查。