Подтвердить что ты не робот

Можно ли смешивать файлы .cs(С#) и .fs(F #) в одном проекте консоли Windows Visual Studio? (.СЕТЬ)

Как это сделать? Можно ли вызвать функцию из одного кода F # в С# без использования отдельного файла dll или проекта?

4b9b3361

Ответ 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!