Ответ 1
Вам нужно указать версию версии F # версии 4.0. Эта версия соответствует версии 4.0 mscorlib 4.0 и не имеет конфликтующих типов. Они будут в этом каталоге
C:\Program Files (x86)\Reference Assemblies\Microsoft\FSharp\2.0\Runtime\v4.0
Я использую некоторые типы 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 отправить этот параметр компилятору С#.
У кого-нибудь есть решение?
Вам нужно указать версию версии F # версии 4.0. Эта версия соответствует версии 4.0 mscorlib 4.0 и не имеет конфликтующих типов. Они будут в этом каталоге
C:\Program Files (x86)\Reference Assemblies\Microsoft\FSharp\2.0\Runtime\v4.0
Вы можете разрешать конфликты, используя псевдонимы сборки С# и квалификацию исходной сборки явно в коде С#: например, если у вас есть тип Tuple, определенный как в сборке F # и в ваших библиотеках.