Включение FSharp.Core в проект C #: разрешение конфликтов типов - PullRequest
10 голосов
/ 29 июня 2010

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

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

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

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

Ошибка 2 Тип 'System.Tuple' существует в обоих 'c: \ Program Files (x86) \ Справочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \ Profile \ Client \ mscorlib.dll 'и' c: \ Program Files (x86) \ Справочные сборки \ 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 #.

У кого-нибудь есть решение этой проблемы?

Ответы [ 2 ]

12 голосов
/ 29 июня 2010

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

C: \ Program Files (x86) \ Справочные сборки \ Microsoft \ FSharp \ 2.0 \ Runtime \ v4.0

3 голосов
/ 29 июня 2010

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

...