在C#项目中包含FSharp.Core:解决类型冲突

时间:2010-06-28 23:08:12

标签: c# visual-studio f# csc

我正在使用C#中的一些F#类型(Matrix等),所以我需要在我的C#项目中引用FSharp.Core程序集。到目前为止,非常好。

但是,显然mscorlib.dll(v4)中定义了一些在FSharp.Core(v2)中“重复”的类型,如System.TupleSystem.IObservable。我无法理解为什么会出现在.Net 4中。Matt Ellis specifically said they would be removed in his MSDN article

  

一种语言遭遇[重复]问题是F#,之前在FSharp.Core.dll中定义了自己的元组类型,但现在将使用Microsoft .NET Framework 4中添加的元组。

如果我可以指定我想在C#程序中使用哪一个,我已经准备好了解这个特别不合时宜的复制。例如,当我尝试使用System.Tuple类型时,我得到以下C#编译器错误:

  

错误2'c:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ Profile \ Client \ mscorlib.dll'和'c:'中存在'System.Tuple'类型\ Program Files(x86)\ Reference Assemblies \ Microsoft \ FSharp \ 2.0 \ Runtime \ v2.0 \ FSharp.Core.dll'

显然,这方面的问题是a switch on the C# compiler command line which aliases the type

  

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

但是,我找不到让Visual Studio将此参数发送到C#编译器的方法。

任何人都有解决方案吗?

2 个答案:

答案 0 :(得分:12)

您需要引用F#运行时的4.0版本。此版本对应于mscorlib的4.0版本,并且没有冲突类型。它们将在此目录中

  

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

答案 1 :(得分:3)

您可以使用C# assembly aliases并在C#代码中显式限定源程序集来解决冲突:例如,如果您在F#程序集和库中都定义了Tuple类型。