10

C# からいくつかの F# 型 ( Matrixなど) を使用しているため、C# プロジェクトで FSharp.Core アセンブリを参照する必要があります。ここまでは順調ですね。

ただし、 mscorlib.dll (v4) で定義されているいくつかの型は、FSharp.Core (v2) で「複製」されているようSystem.TupleですSystem.IObservable。なぜこれが .Net 4 にあるのか理解できません。Matt Ellis は、MSDN の記事でそれらが削除されると具体的に述べています

その [重複] 問題に苦しんでいる言語の 1 つは F# で、以前は FSharp.Core.dll で独自のタプル型を定義していましたが、Microsoft .NET Framework 4 で追加されたタプルを使用するようになりました。

ただし、C# プログラムで使用したいものを指定できれば、この特定の見苦しい重複を回避する準備ができています。System.Tupleたとえば、型を使用しようとすると、次の C# コンパイラ エラーが発生します。

エラー 2 タイプ 'System.Tuple' が 'c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\Profile\Client\mscorlib.dll' と 'c:\Program Files の両方に存在します(x86)\Reference Assemblies\Microsoft\FSharp\2.0\Runtime\v2.0\FSharp.Core.dll'

どうやら、これを回避する方法は、C# コンパイラ コマンド ラインのスイッチで、 type のエイリアスを作成することです

csc.exe MyType.cs /reference:System.Tuple`2=mscorlib.dll /reference:FSharp.Core.dll

ただし、Visual Studio からこのパラメーターを C# コンパイラーに送信する方法が見つかりません。

誰にもこれに対する解決策がありますか?

4

2 に答える 2

13

F# ランタイムの 4.0 バージョンを参照する必要があります。このバージョンは、mscorlib の 4.0 バージョンに対応しており、競合する型はありません。それらはこのディレクトリにあります

C:\Program Files (x86)\Reference Assemblies\Microsoft\FSharp\2.0\Runtime\v4.0

于 2010-06-28T23:17:08.403 に答える
4

C#アセンブリエイリアスを使用し、ソースアセンブリをC#コードで明示的に修飾することで、競合を解決できます。たとえば、F#アセンブリとライブラリの両方でタプルタイプが定義されている場合です。

于 2010-06-28T23:54:50.907 に答える