2014-04-14 76 views
4

我需要在運行時將一些f#源文件編譯到程序集中。使用Codedom在運行時編譯F#源代碼?

目前我使用Fsharp.Compiler.CodeDom,它做我需要它做的事情,但它似乎像這個圖書館沒有被維護。 我想知道,我使用正確的嗎?

注:我看到一些類似的問題的答案,但這些問題是幾年前。

+5

我相信fsharp編譯器服務允許這個 - 請參閱http://fsharp.github.io/FSharp.Compiler.Service/compiler.html –

+0

是的,這有效,想把它作爲答案?有關Fsharp.core的一些調整,但現在沒關係 – roundcrisis

回答

1

這應該真正去約翰 - 帕爾默....從他的鏈接尖晶石,基本上只是工作

[<EntryPoint>] 
let main argv = 
    printfn "%A" argv 

    let scs = SimpleSourceCodeServices(); 
    let fn = Path.GetTempFileName(); 
    let fn2 = Path.ChangeExtension(fn, ".fs"); 
    let fn3 = Path.ChangeExtension(fn, ".dll"); 

    File.WriteAllText(fn2, """ 
module File1 
    let seven = 
      3 + 4 
     """); 

    let errors1, exitCode1 = scs.Compile([| "fsc.exe"; "-o"; fn3; "-a"; fn2 |]) 
    let ex = File.Exists(fn3) 
    printfn "File %s exists: %b" fn3 ex 

我不得不承認,這將是冷靜地看到非fsc.exe選項:d