6

给定一个简单的 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

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

4

1 回答 1

2

我更愿意发表评论,但这会太长,我认为这更像是一种解决方法,因为我对 Fake 不太熟悉。我的猜测是您的运行目标实际上正在执行,但可能被 AsyncExec 吞噬,或者它只是显示在假输出窗口(尝试执行)中,但没有启动新窗口。

您可以只创建一个 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 工作。

于 2016-09-13T01:44:36.290 回答