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

标签 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

但是没有迹象表明控制台应用程序正在启动并等待输入。

最佳答案

我更愿意发表评论,但会太长,我认为这更像是一种解决方法,因为我对 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/

相关文章:

reflection - F# nameof 运算符不是一流的函数

f# - 构建 F# 项目时如何创建对 fsc 的引用?

c# - 找不到 VSCode .NET Core SDK

python - "Python: Current File (Integrated Terminal)"-Visual Studio 代码

javascript - VS Code 智能感知和 TypeScript 编译不匹配

F# Fake 在 WSL2 中运行解析托管 Windows 中的程序路径,而不是 Linux 中的程序路径

f# - 在 f# 脚本中执行 c# 代码有意外行为

python - 静态类型元编程?

f# - FAKE - 在新窗口中启动进程

linux - F# on linux mono 全静态编译