给定一个简单的 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
但是没有迹象表明控制台应用程序正在启动并等待输入。
最佳答案
我更愿意发表评论,但会太长,我认为这更像是一种解决方法,因为我对 Fake 不太熟悉。我的猜测是您的运行目标实际上正在执行,但可能被 AsyncExec 吞并,或者它只是显示在假输出窗口(尝试 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 工作。
关于f# - 如何从 VS Code 启动 F# 控制台应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39459040/