我应该如何重新启动dotnetcore C#控制台应用程序?
我已经尝试过针对C#控制台应用程序的建议,但不适用于dotnetcore。
(这不是asp.net,这是很多dotnetcore回答的地方)
答案 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}\"",