Как запустить консольное приложение F# из VS Code
Учитывая простое консольное приложение F#:
[<EntryPoint>]
let main argv =
printfn "Hello world"
Console.ReadLine() |> ignore
0
Что мне нужно сделать, чтобы запустить консольное приложение так же, как ctrl F5 сделал бы в Visual Studio. Я попытался запустить его из сценария сборки FAKE, используя 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
Но никаких признаков запуска консольного приложения и ожидания ввода.
1 ответ
Я бы предпочел прокомментировать, но это было бы слишком долго, я считаю, что это скорее обходной ответ, так как я не настолько знаком с Fake. Я предполагаю, что ваша цель выполнения на самом деле выполняется, но, вероятно, проглатывается 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.