2017-11-19 7 views
2

컴파일 된 Azure 함수가 DLL에서 함수 호출을 호출하는 DLL에서 메서드를 찾지 못합니다.컴파일 된 Azure 함수, FunctionInvocationException : 메서드를 찾을 수 없습니다.

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

    ... 

필요한 모든 DLL이 있습니다. 이 방법이 존재합니다. 그리고 하위 DLL에 대한 open 문을 추가했습니다.

코드 :

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 

답변

1

Azure 함수는 DLL이 .NET Framework 4.5 용으로 작성되었거나 System.Tuple이 FsPickler 아래에서 변경 되었기 때문에 FsPickler.dll을 지원할 수 없습니다. See discussion here

+0

아참. 정말 가짜 오류 메시지입니다. –

1

흠. MBrace.FsPickler 어셈블리를 사용할 수 없다는 점에서 배포 문제와 매우 흡사합니다. 나는 당신을 포스트에서 알지만, 어셈블리가 함수 어셈블리와 같은 폴더에 있는지 100 % 확실합니까?

함수 런타임/디버거에서 로컬로 실행됩니까? 어떤 버전의 F #을 실행하고 있습니까?

+0

FsPickler.dll은 PSlogger.dll과 마찬가지로 함수의 루트에 있습니다. 함수 및 PSlogger의 대상 런타임은 FSharp.Core 4.4.1.0이고 FSharp.Core.dll도 루트에 있습니다. PSlogger.dll뿐만 아니라 컴파일 된 함수는 .NET Framework 4.7을 대상으로합니다. 함수 어셈블리가 루트에 있습니다. 루트를 참조 할 때 함수 루트가 아닌 컴파일 된 함수 루트를 의미합니다. 함수의 로컬 디버거를 VS 2017 15.4.4에서 시작하도록 할 수는 있었지만 실제로 타이머를 트리거하여 로컬에서 실행하고 디버깅 할 수있는 방법을 찾지 못했습니다. –

+0

"func run "을 호출하여 로컬에서 실행할 때 Timer 트리거를 수동으로 트리거 할 수 있습니다. (실제로 모든 트리거에 대해 작동합니다.) –

+0

예, 로컬 디버깅을 시도하고 파일 구조의 일부 스크린 샷을 캡처하십시오. 디버그를 제공 할 수 있다면 디버그 할 필요가있을 것입니다. –