2016-06-01 4 views
1

F#のRabbitMQを使用している小さなライブラリがVisual Studioを使用して正常に動作しています。Xamarin StudioでF#interactiveを使用しているときのメソッド引数の数が正しくありません

最新の(6.1)Xamarin Studioでロードしようとすると、ライブラリは正常にコンパイルされますが、F#のインタラクティブなソースファイルを読み込もうとすると、特定のメソッドの引数の数が正しくないという不満があります。

たとえば、RabbitMQ IModel.ExchangeDeclareには、2つ、3つ、5つの引数を持つ3つのオーバーロードがあります(Xamarin Assembly Browserを使用して確認できます)。ライブラリは5つの引数を持つオーバーロードを使用しています。 F#インタラクティブは5つの引数を持つオーバーロードがないことを示すエラーを出力するので、RabbitMQ APIメソッドをインタラクティブに実行することはできません。プロジェクトはうまくコンパイルされます。このエラーはRabbitMQとは関係ありませんが、なぜF#Interactiveは混乱するのでしょうか?

+1

少なくとも単純な例を投稿してください。しかし、あなたは別のDLLを参照しています。 –

+0

上記のように、5つの引数を指定したExhangeDeclare呼び出しは失敗します。 Channel.ExchangeDeclare(queueExchange.ExchangeName、exchangeName、queueExchange.Durable、false、queueExchange.Arguments)。 他のRabbitMQ.dllを検索します。これまではこれは奇妙に見えます。 –

+0

はい、あなたが正しいと言いました。これは参照されているものです: 参照 '/Library/Frameworks/Mono.framework/Versions/4.4.0/lib/mono/4.5/RabbitMQ.Client.dll'(ファイルはF#Interactiveによってロックされている可能性がありますプロセス) 質問は今:私はこれを上書きする必要がありますか?私は正しいパスを参照する#Iステートメントを持っています。 –

答えて

1

コメントに示唆されているとおり、別のDLLである必要があります。そしてそうだった。問題は、WindowsのVisual Studioで使用されるF#Interactiveが、Xamarin/MonoのFSIでどのように処理されているかを比較する異なるロジックを使用していることです。

のWindowsで

のVisual Studioは#I directiveによって制御することができ、(ここではそれについての詳細を:Avoid using relative paths in #r directives)を#r directiveに相対パスを指定することをお勧めはありませんが、Xamarin /モノラルは、右のDLLをロードする#Rディレクティブでのパス指定の権限を必要とし。

関連する問題