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

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

Ответы [ 5 ]

21 голосов
/ 21 января 2009

Вы не можете включить два разных языка в одном проекте, но вы можете объединить их, используя ilmerge . Для этого поместите оба проекта в одно и то же решение и назовите модуль F #, как любой dll. Как часть вашего сценария развертывания, запустите ilmerge, чтобы объединить exe-файл и dll-файл в один exe-файл. См. Статью Code Project , в которой подробно описано, как использовать ilmerge для создания exe-файла.

15 голосов
/ 01 января 2011

Невозможность смешать C # и F # в одном проекте создает проблему; Это приводит к круговым зависимостям между двумя проектами. Концептуально существует только один проект, содержащий два языка, но из-за того, как Visual Studio управляет проектами, языки не могут смешиваться, что приводит к циклическим зависимостям.

Пока единственное решение, которое я вижу, состоит в том, чтобы создать множество интерфейсов в третьем проекте и сделать так, чтобы один из проектов ссылался на проект интерфейсов, а не на реальный проект. Есть ли лучший способ?

С уважением, Ник

12 голосов
/ 21 января 2009

Нет. Если вы хотите создать один .exe-файл, вы можете использовать некоторые параметры статической ссылки f #, используя переключатель командной строки F # -full-help для получения более подробной информации.

6 голосов
/ 31 января 2013

Вы не можете скомпилировать исходные файлы F # (.fs) в проекте C #, но вы можете добавить файлы сценариев F # (.fsx), которые можно использовать для ссылки и изучения сборки проекта C # из интерактивного F #:

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 # (.fsx):

#r "bin\debug\ClassLibrary1.dll"

Math.PowN(2.0,3)
0 голосов
/ 21 января 2017

Скомпилируйте ваш код F #, «декомпилируйте» с помощью любого инструмента (например, рефлектор, ilspy) в код C #, включите его в проект -> Прибыль!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...