已编译Azure函数,FunctionInvocationException:未找到方法
我编译的Azure函数在DLL中找不到由我的函数调用的DLL调用的方法已编译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
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