В том числе FSharp.Core в проекте С#: разрешение конфликтов типа

Я использую некоторые типы F # (Matrix и др.) из С#, поэтому мне нужно ссылаться на сборку FSharp.Core в мой проект С#. Пока что так хорошо.

Однако существуют, по-видимому, некоторые типы, определенные в mscorlib.dll(v4), которые "дублируются" в FSharp.Core(v2), например System.Tuple и System.IObservable. Я не могу понять, почему это происходит .Net 4. Мэтт Эллис специально сказал, что они будут удалены в его статье MSDN:

Один язык, страдающий этой проблемой [дублирования], был F #, который ранее определял свой собственный тип кортежа в FSharp.Core.dll, но теперь будет использовать кортеж, добавленный в Microsoft.NET Framework 4.

Я готов посмотреть прошлое этого неподходящего дублирования, если бы я мог просто указать, какой из них я хочу использовать в своей программе на С#. Когда я пытаюсь использовать тип System.Tuple, например, я получаю следующую ошибку компилятора С#:

Ошибка 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 '

Похоже, что это вокруг переключатель в командной строке компилятора С#, который псевдонизирует тип:

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

Однако я не могу найти способ заставить Visual Studio отправить этот параметр компилятору С#.

У кого-нибудь есть решение?

Ответ 1

Вам нужно указать версию версии F # версии 4.0. Эта версия соответствует версии 4.0 mscorlib 4.0 и не имеет конфликтующих типов. Они будут в этом каталоге

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

Ответ 2

Вы можете разрешать конфликты, используя псевдонимы сборки С# и квалификацию исходной сборки явно в коде С#: например, если у вас есть тип Tuple, определенный как в сборке F # и в ваших библиотеках.