已编译Azure函数,FunctionInvocationException:未找到方法

已编译Azure函数,FunctionInvocationException:未找到方法,azure,f#,azure-functions,Azure,F#,Azure Functions,我编译的Azure函数在DLL中找不到由我的函数调用的DLL调用的方法 Microsoft.Azure.WebJobs.Host.FunctionInvocationException : Exception while executing function: Functions.CompiledTrigger ---> System.AggregateException : One or more errors occurred. ---> Method not

我编译的Azure函数在DLL中找不到由我的函数调用的DLL调用的方法

Microsoft.Azure.WebJobs.Host.FunctionInvocationException : Exception while executing function: Functions.CompiledTrigger 
    ---> System.AggregateException : One or more errors occurred. 
    ---> Method not found: 'Void MBrace.FsPickler.BinarySerializer..ctor(Microsoft.FSharp.Core.FSharpOption`1<Boolean>, Microsoft.FSharp.Core.FSharpOption`1<MBrace.FsPickler.ITypeNameConverter>, Microsoft.FSharp.Core.FSharpOption`1<MBrace.FsPickler.IPicklerResolver>)'.

   at Microsoft.Azure.WebJobs.Script.Description.DotNetFunctionInvoker.GetTaskResult(Task task) 
   at C:\projects\azure-webjobs-sdk-script\src\WebJobs.Script\Description\DotNet\DotNetFunctionInvoker.cs : 453

   at Microsoft.Azure.WebJobs.Script.Description.DotNetFunctionInvoker.<>c.<InvokeCore>b__26_0(Task t) 
   at C:\projects\azure-webjobs-sdk-script\src\WebJobs.Script\Description\DotNet\DotNetFunctionInvoker.cs : 276

   at System.Threading.Tasks.ContinuationResultTaskFromTask`1.InnerInvoke()

   at System.Threading.Tasks.Task.Execute()

   ...

嗯。这看起来很像是部署问题,因为MBrace.FsPickler程序集不可用。我知道您在帖子中提到过,但是您是否100%确定程序集与函数程序集位于同一文件夹中

它是否在函数运行时/调试器上本地运行?
您正在运行哪个版本的F#?

问题是Azure函数无法支持FsPickler.dll,这可能是因为dll是为.NET Framework 4.5构建的,也可能是因为System.Tuple在FsPickler下发生了更改

FsPickler.dll位于函数的根目录中,就像PSlogger.dll一样。函数和PSlogger的目标运行时是FSharp.Core 4.4.1.0,FSharp.Core.dll也在根目录中。编译后的函数以及PSlogger.dll目标.NET Framework 4.7。函数程序集位于根目录中。当我提到根时,我指的是编译后的函数根,而不是函数app根。虽然我已经能够在VS 2017 15.4.4中启动函数的本地调试器,但我还没有弄清楚如何触发计时器事件,以便我可以实际在本地运行和调试。在本地运行时,可以调用“func run”手动触发计时器触发器。(实际上适用于所有触发器)是的,尝试在本地调试并抓取一些文件结构的屏幕截图。如果你能提供的话,我可能需要一个复制程序来调试。运行func也会有问题。将项目推送到自述文件中,并在自述文件中记录问题。我以前在自述文件中看到过这个错误,但只有当我的webjobs在模块中的模块中声明时才出现?这在IL中呈现为嵌套类,Azure WebJobs SDK无法使用标准函数(WebJob)定位器找到该类。更改为顶级模块为我修复了它。
module Trigger

open System
open Microsoft.Azure.WebJobs
open Microsoft.Azure.WebJobs.Host
open Microsoft.Azure.WebJobs.Extensions
open PSlogger             //this DLL is called            
open MBrace.FsPickler     //which calls this DLL


let logMessage (initLog : CountingLog) connString curretnProcess message addlInfo  =

    // fails inside this call, whether I use the async or non-async function
    //IO.insertAsync connString {initLog.Log with 
    IO.insert connString {initLog.Log with 
                                UtcTime = DateTime.UtcNow;
                                Process = curretnProcess
                                Message = message
                                StringInfo = addlInfo
                                } "MyLogPrefix"

let Run(myTimer: TimerInfo, log: TraceWriter ) =
    async {
        ...

        logMessage logger connString None "starting run" None |> ignore

        ...

    } |> Async.StartAsTask