Как это сделать? Можно ли вызвать функцию из одного кода F # в С# без использования отдельного файла dll или проекта?
Можно ли смешивать файлы .cs(С#) и .fs(F #) в одном проекте консоли Windows Visual Studio? (.СЕТЬ)
Ответ 1
Вы не можете включать два разных языка в один и тот же проект, но вы можете объединить их с помощью ilmerge. Чтобы сделать это, поместите оба проекта в одно и то же решение и обратитесь к модулю F #, как и к любой DLL. В рамках развертывания script запустите ilmerge, чтобы объединить файл exe и файл dll в один файл exe. См. Статью Code Project, в которой подробно описано, как использовать ilmerge для создания exe.
Ответ 2
Невозможность смешивать С# и F # в одном проекте создает проблему; Это приводит к циклическим зависимостям между этими двумя проектами. Концептуально существует только один проект, содержащий два языка, но из-за того, что визуальная студия управляет проектами, языки не могут быть смешаны, что приводит к циклическим зависимостям.
На данный момент единственное решение, которое я вижу, создает много интерфейсов в третьем проекте, и один из проектов относится к проекту интерфейсов, а не к реальному проекту. Есть ли лучший способ?
С уважением, Ник
Ответ 3
Нет. Если вы хотите создать единый файл .exe, вы можете использовать некоторые из статических ссылок f #, используя дополнительный код F # --full-help comandline.
Ответ 4
Вы не можете скомпилировать исходные файлы F # (.fs) в проекте С#, но вы можете добавить F # script файлы (.fsx), которые вы можете использовать для ссылки и изучения сборки проекта С# из F # interactive:
public static class Math
{
public static double PowN(double d, int n)
{
var result = 1;
for (int i = 0; i < n; i++) result *= d;
return result;
}
}
F # script файл (.fsx):
#r "bin\debug\ClassLibrary1.dll"
Math.PowN(2.0,3)
Ответ 5
Скомпилируйте свой код F #, "декомпилируйте" любой инструмент (например, отражатель, ilspy) на С# -код, включите его в проект → Profit!