FAKE - 在新 window 中开始进程

FAKE - Start process in new window

我正在尝试通过 FAKE 脚本在新控制台 window 中启动应用程序。

在普通的 .NET 代码中,方法 System.Diagnostics.Process.Start 可用于执行此操作。

我过去也用 CAKE 做过,像这样:

Task("run-myapp")
  .Does(() => {
    var info = new ProcessStartInfo {
      FileName = "dotnet",
      Arguments = "run myapp.fsproj",
      WorkingDirectory = "C:\path\to\my\app\"
    };
    Process.Start(info);
  });

在 FAKE 中,我尝试了同样的事情,但这会启动一个新的后台进程并输出到控制台 window,我在其中 运行 FAKE。然后我稍后需要使用任务管理器来终止该进程。

Target.create "run-myapp" (fun _ ->
  let psi = ProcessStartInfo()
  psi.FileName <- "dotnet"
  psi.Arguments <- "run myapp.fsproj"
  psi.WorkingDirectory <- "C:\path\to\my\app\"
  Process.Start psi |> ignore
)

我也尝试过显式设置 ProcessStartInfo.CreateNoWindow <- false(尽管 false 是默认设置)并且这不会改变任何东西。

有没有办法在 FAKE 中做到这一点?

我在这个已关闭的 GitHub 问题中找到了答案:https://github.com/dotnet/corefx/issues/21767#issuecomment-312328630

原因是 UseShellExecute 在 .NET Framework 中的默认值是 false,但在 .NET Core 中是 true。 CAKE 在 Framework 中,FAKE 5 在 Core 中。

解决方案:

Target.create "run-myapp" (fun _ ->
  let psi = ProcessStartInfo()
  psi.FileName <- "dotnet"
  psi.Arguments <- "run myapp.fsproj"
  psi.WorkingDirectory <- "C:\path\to\my\app\"
  psi.UseShellExecute <- true
  Process.Start psi |> ignore
)