2016-09-12 35 views
5

给出一个简单的F#控制台应用程序:如何从VS码推出的F#控制台应用程序

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

什么我需要做的,开始控制台应用了同样的方式是按Ctrl F5将在Visual做工作室。 我已经尝试运行它使用Fake.ProcessHelper形成假构建脚本:

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 

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

回答

2

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

您只需创建一个runcmd.bat(假设你是在Windows上),并把下面进去,确保文件是不是在你的build目录,因为它可能得到清理:

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)伪造,并选择运行,它会编译,启动一个新的命令行并等待ReadLine。它也可以通过Ctrl + F5工作。

相关问题