2009-01-21 1 views

ответ

21

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

+2

Стационарный коммутатор F # так же, как ильмерж. – Robert

12

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

15

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

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

С наилучшими пожеланиями, Ник

+6

Отличные комментарии и вопросы, но вы не получите большого внимания, если не опубликуете его как вопрос. –

+4

+1 Я видел, как несколько коммерческих проектов используют ILMerge, чтобы получить C# и F # в одну и ту же сборку. Microsoft должна должным образом поддерживать ILMerge и внедрять его в Visual Studio, а не оставлять одного сотрудника для выпуска программного обеспечения для альфа-версии. –

6

Вы не можете скомпилировать 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

Скомпилируйте F # код, "декомпилировать" с любым инструментом (например, отражатель, я lspy) на код C#, включите его в проект -> Прибыль!

Смежные вопросы