F# MissingMethodException与Suave&;寓言:远程处理
是重现问题的最小样本 尝试使用Fable客户端或仅导航到该端点会导致服务器抛出找不到的方法:F# MissingMethodException与Suave&;寓言:远程处理,f#,suave,F#,Suave,是重现问题的最小样本 尝试使用Fable客户端或仅导航到该端点会导致服务器抛出找不到的方法: [ERR] request failed System.MissingMethodException: Method not found: 'Microsoft.FSharp.Collections.FSharpMap`2<System.String,System.Object> HttpContext.get_userState()'. at Fable.Remoting.Suave
[ERR] request failed
System.MissingMethodException: Method not found: 'Microsoft.FSharp.Collections.FSharpMap`2<System.String,System.Object> HttpContext.get_userState()'.
at Fable.Remoting.Suave.SuaveUtil.setBinaryResponseBody@26-1.Invoke(Unit unitVar)
at Microsoft.FSharp.Control.AsyncPrimitives.CallThenInvoke[T,TResult](AsyncActivation`1 ctxt, TResult result1, FSharpFunc`2 part2) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\async.fs:line 386
at Fable.Remoting.Server.Proxy.makeEndpointProxy@80-10.Invoke(AsyncActivation`1 ctxt)
at Microsoft.FSharp.Control.AsyncPrimitives.unitAsync@577.Invoke(AsyncActivation`1 ctxt) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\async.fs:line 577
at Program.greetFun@12-1.Invoke(AsyncActivation`1 ctxt) in C:\Users\username\code\test\suavetest\Program.fs:line 12
at Microsoft.FSharp.Control.AsyncPrimitives.unitAsync@577.Invoke(AsyncActivation`1 ctxt) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\async.fs:line 577
at Microsoft.FSharp.Control.Trampoline.Execute(FSharpFunc`2 firstAction) in F:\workspace\_work\1\s\src\fsharp\FSharp.Core\async.fs:line 105
[ERR]请求失败
System.MissingMethodException:找不到方法:“Microsoft.FSharp.Collections.FSharpMap`2 HttpContext.get_userState()”。
在Fable.Remoting.Suave.SuaveUtil。setBinaryResponseBody@26-1.调用(单位unitVar)
在F:\workspace\\u work\1\s\src\FSharp\FSharp.Core\async.fs中的Microsoft.FSharp.Control.AsyncPrimitives.CallThenInvoke[T,TResult](异步激活'1 ctxt,TResult result1,FSharpFunc'2 part2)中
在Fable.Remoting.Server.Proxy。makeEndpointProxy@80-10.调用(异步激活'1 ctxt)
位于Microsoft.FSharp.Control.AsyncPrimitives。unitAsync@577.Invoke(AsyncActivation`1 ctxt)在F:\workspace\\u work\1\s\src\fsharp\fsharp.Core\async.fs中:第577行
在节目中。greetFun@12-1.在C:\Users\username\code\test\suavetest\Program.fs中调用(AsyncActivation`1 ctxt)。第12行
位于Microsoft.FSharp.Control.AsyncPrimitives。unitAsync@577.Invoke(AsyncActivation`1 ctxt)在F:\workspace\\u work\1\s\src\fsharp\fsharp.Core\async.fs中:第577行
在F:\workspace\\u work\1\s\src\FSharp\FSharp.Core\async.fs:第105行的Microsoft.FSharp.Control.Trampoline.Execute(FSharpFunc`2 firstAction)中
这几天来,我一直在努力,没有任何进展。使用.Net Core 3.1和.Net 5时也会发生相同的错误
有人知道这可能是什么原因吗?我没有看到Fable.Remoting或Suave的任何公开问题,所以我不得不想象这是我做错了什么?这看起来像是一个FSharp.Core不匹配的问题。您是否依赖于低于4.7.2的特定FSharp.Core包 一般来说,除非您正在编写一个用于在NuGet上发布的库,否则您应该完全不要将依赖关系固定在FSharp.Core上。对于应用程序,请始终使用.NET SDK提供的任何内容,您实际上永远不会遇到这些问题 对于库作者来说,显式地FSharp.Core包引用是一个额外的问题,他们需要担心他们的包与哪个F#版本兼容。如果这不是你的要求,那么最好不要选择额外的复杂性 在全新的.NET 5控制台应用程序中使用您的示例代码对我很有用: Test.fsproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Compile Include="Program.fs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="fable.remoting.suave" Version="4.13.0" />
</ItemGroup>
</Project>
Exe
net5.0
Program.fs
open System
open Suave
open Fable.Remoting.Server
open Fable.Remoting.Suave
type ITestAPI = {
Test : Async<string>
}
let greetFun =
async {
return "It works!"
}
let testAPI = {
Test = greetFun
}
let webApp =
Remoting.createApi()
|>Remoting.fromValue testAPI
|> Remoting.withDiagnosticsLogger (printfn "%s")
|>Remoting.buildWebPart
[<EntryPoint>]
let main argv =
startWebServer defaultConfig webApp
0 // return an integer exit code
开放系统
开放文雅
打开Fable.Remoting.Server
开放寓言。远程处理。文雅
类型ITestAPI={
测试:异步
}
让greetFun=
异步的{
return“它工作了!”
}
设testAPI={
测试=greetFun
}
让webApp=
Remoting.createApi()
|>Remoting.fromValue testAPI
|>远程处理.withDiagnosticsLogger(打印“%s”)
|>Remoting.buildWebPart
[]
让主argv=
startWebServer defaultConfig webApp
0//返回整数退出代码
在封面下,它使用SDK中的FSharp.Core,版本为4.7.0或更高版本,这使得它与您正在使用的库兼容,并且在运行时也不会出现异常。啊,我想就是这样。我的fsproj文件引用了Fable.Remoting.Suave和Suave本身。删除Suave引用后,它会按预期工作!