2009-01-21 12 views

Respuesta

21

No puede incluir dos idiomas diferentes en el mismo proyecto, pero puede combinarlos usando ilmerge. Para hacer esto, ponga ambos proyectos en la misma solución y haga referencia al módulo F # como lo haría con cualquier dll. Como parte de su script de despliegue, ejecute ilmerge para combinar el archivo exe y el archivo dll en un solo archivo exe. Consulte este artículo Code Project que detalla cómo usar ilmerge para crear un exe.

+2

F # 's enlace de enlace estático así que lo mismo que ilmerge. – Robert

12

No. Si desea producir un .exe solo, puede usar algunas de las opciones de enlace estático f #, use el interruptor de línea común F # --full-help con más detalles de estos.

15

No poder mezclar C# y F # en el mismo proyecto crea un problema; Conduce a dependencias circulares entre los dos proyectos. Conceptualmente, solo hay un proyecto que contiene dos idiomas, pero debido a la forma en que visual Studio administra los proyectos, los idiomas no se pueden mezclar, lo que lleva a dependencias circulares.

Por ahora, la única solución que veo es crear muchas interfaces en un tercer proyecto y hacer que uno de los proyectos se refiera al proyecto de interfaces, en lugar del proyecto real. ¿Hay una manera mejor?

Saludos cordiales, Nick

+6

Excelente comentario y pregunta, pero no recibirá mucha atención a menos que lo publique como una pregunta. –

+4

+1 He visto varios proyectos comerciales recurrir al uso de ILMerge para obtener C# y F # en el mismo ensamblaje. Microsoft debería admitir ILMerge correctamente e integrarlo en Visual Studio en lugar de dejar a un empleado para que ejecute el software de lanzamiento alfa. –

6

No se puede compilar archivos # fuente F (.fs) en un proyecto de C#, pero se puede añadir archivos de script de F # (.fsx) que se puede utilizar para hacer referencia y explorar el C# ensamblaje de proyecto de F # interactivo:

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; 
    } 
} 

archivo de script de F # (.fsx):

#r "bin\debug\ClassLibrary1.dll" 

Math.PowN(2.0,3) 
0

compilar el código C#, "descompilar" con cualquier herramienta (como reflector, i lspy) al código C#, inclúyalo en un proyecto -> ¡Beneficio!

Cuestiones relacionadas