簡體   English   中英

在C#項目中包含FSharp.Core:解決類型沖突

[英]Including FSharp.Core in a C# project: resolving type collisions

我正在使用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)\\ Reference Assemblies \\ Microsoft \\ FSharp \\ 2.0 \\ Runtime \\ v2.0 \\ FSharp.Core.dll'

顯然,解決這個問題的方法是在C#編譯器命令行上切換該類型的別名

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

但是,我找不到讓Visual Studio將此參數發送到C#編譯器的方法。

有人有解決方案嗎?

您需要引用F#運行時的4.0版本。 此版本對應於mscorlib的4.0版本,並且沒有沖突類型。 他們將在此目錄中

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

您可以通過在C#代碼中顯式使用C#程序集別名和限定源程序集來解決沖突:例如,如果在F#程序集和庫中都定義了Tuple類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM