我正在尝试使用 PowerShell 调用一些使用 Akka.Net 演员的 F# 代码。
F# 代码在单元测试和从 F# 解释器运行时工作正常,但是当我从 PowerShell cmdlet 调用相同的代码时,我得到以下异常:
System.MissingMethodException: Method not found: 'Void Nessos.FsPickler.BinarySerializer..ctor(Microsoft.FSharp.Core.FSharpOption`1<Boolean>,
Microsoft.FSharp.Core.FSharpOption`1<Nessos.FsPickler.ITypeNameConverter>)'.
at Akka.FSharp.Serialization.ExprSerializer..ctor(ExtendedActorSystem system)
at Akka.FSharp.Serialization.exprSerializationSupport(ActorSystem system)
at Namespace.NewActorCmdlet..ctor(Host hostA, Host hostB, Boolean option, UserDetails user) in
E:\Projects\Namespace\NewActorCommand.fs:line 24
at Namespace.StartNewActorCommand.ProcessRecord() in
E:\Projects\Namespace\StartNewActor.fs:line 67
at System.Management.Automation.CommandProcessor.ProcessRecord()
我尝试[Nessos.FsPickler.BinarySerializer]::new.OverloadDefinitions
在该 PowerShell 会话中运行以检查 PS 虽然可用的方法,但我得到:
Nessos.FsPickler.BinarySerializer new(Microsoft.FSharp.Core.FSharpOption[bool] forceLittleEndian, Microsoft.FSharp.Core.FSharpOption[Nessos.FsPickler.ITypeNameConverter] typeConverter)
我注意到的第一件事是 PowerShell 显示的版本采用 FSharpOption[bool] 而不是 FSharpOption[Boolean]。我尝试修改 Akka.FSharp 代码以明确传递一个选项,但这似乎没有帮助。
我正在使用 FSharp.Core 4.0.0.1(其他链接建议 3.0 有问题)。
有没有人见过类似的东西?
即使是关于在哪里寻找问题的建议也会有所帮助,我不确定问题是出在 PowerShell、F# 还是 Akka.Net 上。