如何从VS Code启动F#控制台应用程序

时间:2016-09-12 21:26:02

标签: f# visual-studio-code f#-fake ionide

给出一个简单的F#控制台应用程序:

[<EntryPoint>]
let main argv =
    printfn "Hello  world"
    Console.ReadLine() |>  ignore
    0

我需要做的是以与ctrl F5在Visual Studio中相同的方式启动控制台应用程序。 我尝试使用Fake.ProcessHelper:

从FAKE构建脚本运行它
Target "Run" (fun _ ->     

        let exe = @"C:\Source\code\fs_console_app\build\fs_console_app.exe"
        let errorCode = Shell.AsyncExec(exe, "", buildDir)
        ()    
    )

点击Ctrl F5我收到以下构建报告:

Target     Duration
------     --------
Build      00:00:00.3916039
Run        00:00:00.0743197
Total:     00:00:00.5605493
Status:    Ok

但没有控制台应用程序启动并等待输入的迹象。

1 个答案:

答案 0 :(得分:2)

我更愿意发表评论但是时间过长,我认为这更像是一个解决方案,因为我对Fake并不熟悉。我的猜测是你的Run Target实际上正在被执行,但可能被AsyncExec吞没,或者只是在Fake输出窗口中显示(尝试Exec),但是没有启动新窗口。

您可以创建一个runcmd.bat(假设您在Windows上),并将以下内容放入其中,确保该文件不在您的构建目录中,因为它可能会被清除:

start C:\Source\code\fs_console_app\build\fs_console_app.exe

您需要开始启动新的cmd窗口。当然,这可能是其他东西,bash或powershell等等。

然后在你的build.fsx:

里面
Target "Run" (fun _ ->     

        let exe = "path/to/runcmd.bat"
        printfn "%A" "Hello World"
        Shell.Exec(exe) |> ignore

    )

// Build order
"Clean"
  ==> "Build"
  ==> "Run"
  ==> "Deploy"

现在如果我运行(通过Ctrl + Shift + P)Fake,然后选择Run,它会编译,启动一个新的命令行并等待ReadLine。它也适用于Ctrl + F5。