10

我正在使用 C# 中的一些 F# 类型(Matrix等),因此我需要在我的 C# 项目中引用 FSharp.Core 程序集。到现在为止还挺好。

但是,显然 mscorlib.dll (v4) 中定义了一些类型,这些类型在 FSharp.Core (v2) 中“重复”,例如System.TupleSystem.IObservable. 我不明白为什么这是在 .Net 4 中。Matt Ellis 在他的 MSDN 文章中明确表示它们将被删除

一种遭受 [重复] 问题的语言是 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:\Program Files 中都存在类型 'System.Tuple' (x86)\参考程序集\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

您需要引用 4.0 版本的 F# 运行时。此版本对应于 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# 程序集和库中都定义了 Tuple 类型。

于 2010-06-28T23:54:50.907 回答