PowerShell を使用して、Akka.Net アクターを使用する F# コードを呼び出そうとしています。
F# コードは、単体テストおよび F# インタープリターから実行すると正常に動作しますが、PowerShell コマンドレットから同じコードを呼び出すと、次の例外が発生します。
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()
その PowerShell セッションで実行[Nessos.FsPickler.BinarySerializer]::new.OverloadDefinitions
して、PS が使用可能なメソッドを確認したところ、次のようになりました。
Nessos.FsPickler.BinarySerializer new(Microsoft.FSharp.Core.FSharpOption[bool] forceLittleEndian, Microsoft.FSharp.Core.FSharpOption[Nessos.FsPickler.ITypeNameConverter] typeConverter)
私が最初に気付いたのは、PowerShell によって表示されるバージョンが FSharpOption[Boolean] の代わりに FSharpOption[bool] を取ることでした。Option を明示的に渡すように Akka.FSharp コードを変更しようとしましたが、それは役に立たなかったようです。
私は FSharp.Core 4.0.0.1 を使用しています (他のリンクでは 3.0 に問題があることが示唆されています)。
誰かが似たようなものを見たことがありますか?
問題を探す場所についての提案も役に立ちますが、問題が PowerShell、F#、または Akka.Net にあるのかどうかはわかりません。