2009-01-21 10 views

risposta

21

Non è possibile includere due lingue diverse nello stesso progetto, ma è possibile unirle utilizzando ilmerge. Per fare ciò, inserisci entrambi i progetti nella stessa soluzione e fai riferimento al modulo F # come faresti con qualsiasi DLL. Come parte dello script di distribuzione, esegui ilmerge per combinare il file exe e il file dll in un unico file exe. Vedi questo articolo Code Project che spiega come usare ilmerge per creare un exe.

+2

L'interruttore di collegamento statico di F # è la stessa cosa di ilmerge. – Robert

12

No. Se si desidera produrre un singolo exe, è possibile utilizzare alcune delle opzioni di collegamento statico f # utilizzando il comando F # --full-help comando di ulteriori dettagli.

15

Non essere in grado di mescolare C# e F # nello stesso progetto crea un problema; Porta a dipendenze circolari tra i due progetti. Concettualmente esiste un solo progetto che contiene due lingue, ma a causa del modo in cui lo studio visivo gestisce i progetti, le lingue non possono essere mescolate, portando a dipendenze circolari.

Per ora l'unica soluzione che vedo è creare molte interfacce in un terzo progetto e fare in modo che uno dei progetti si riferisca al progetto interfacce, anziché al progetto reale. C'è un modo migliore?

Cordiali saluti, Nick

+6

Commenti e domande eccellenti, ma non riceverai molta attenzione a meno che tu non lo pubblichi come domanda. –

+4

+1 Ho visto diversi progetti commerciali ricorrere all'utilizzo di ILMerge per ottenere C# e F # nello stesso assembly. Microsoft dovrebbe supportare correttamente ILMerge e incorporarlo in Visual Studio piuttosto che lasciare un dipendente a pubblicare il software di rilascio alfa. –

6

Non è possibile compilare i file # sorgente F (.fs) in un progetto C#, ma è possibile aggiungere file # di script F (.fsx), che si possono utilizzare per fare riferimento ed esplorare la montaggio C# del progetto da F # interattivo:

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

#r "bin\debug\ClassLibrary1.dll" 

Math.PowN(2.0,3) 
0

compilare il codice F #, "decompilare" con qualsiasi strumento (come riflettore, i lspy) al codice C#, includilo in un progetto -> Profitto!