给出一个简单的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
但没有控制台应用程序启动并等待输入的迹象。
答案 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。