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