Как запустить консольное приложение 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.

Другие вопросы по тегам