如何重新启动dotnetcore 2 C#控制台应用程序

时间:2018-03-23 01:04:09

标签: c# .net-core

我应该如何重新启动dotnetcore C#控制台应用程序?

我已经尝试过针对C#控制台应用程序的建议,但不适用于dotnetcore。

(这不是asp.net,这是很多dotnetcore回答的地方)

1 个答案:

答案 0 :(得分:1)

好的,所以我要在这个答案中假设,如果你的程序将启动你的程序的新实例然后关闭它,那你就可以了。

我们走了:

由于可以从控制台启动dotnet控制台应用程序,我认为启动控制台应用程序的新实例的最佳方法是使用shell命令。要从您的程序运行shell命令,请将此帮助程序类添加到您的应用程序中:(如果您使用的是Windows而不是mac / linux,请参阅本文末尾)

  using System;
  using System.Diagnostics;
public static class ShellHelper
{
    public static string Shell(this string cmd)
    {
        var escapedArgs = cmd.Replace("\"", "\\\"");

        var process = new Process()
        {
            StartInfo = new ProcessStartInfo
            {
                FileName = "/bin/bash",
                Arguments = $"-c \"{escapedArgs}\"",
                RedirectStandardOutput = true,
                UseShellExecute = false,
                CreateNoWindow = true,
            }
        };
        process.Start();
        string result = process.StandardOutput.ReadToEnd();
        process.WaitForExit();
        return result;
    }
}

然后,由于这是一个扩展方法,只需导入它,然后使用命令创建一个字符串以重新启动应用程序,然后使用Shell()方法。

因此,如果您正在开发中并且通常通过运行dotnet run来启动应用程序,那么请确保您位于正确的目录中,然后只使用这行代码"dotnet run".Shell();

如果您想从运行命令获得反馈,那么只需分配返回值,如string result = "dotnet run".Shell();

然后,一旦启动了新流程,您只需退回主要方法等退出当前程序。

请注意:上面的代码是针对mac / linux的,如果你是在windows上,那么上面两行代码如下:

FileName = "/bin/bash",
Arguments = $"-c \"{escapedArgs}\"",

应替换为:

FileName = "cmd.exe",
Arguments = $"/c \"{escapedArgs}\"",