如何运行 dotnet new 命令并直接在代码中创建一个新项目
How to run dotnet new command and create a new project directly in code
所以我想直接从我的 c# 代码创建新的 dotnet 项目,大概是通过 运行 一个 dotnet new
命令或类似的东西,但我找不到它的语法。我在谷歌上搜索过的几乎所有内容都与如何通过 VS GUI 或 CLI 创建项目有关,留待讨论。
我已经尝试了几次类似这样的不同迭代,但没有成功。它只是挂在 运行 waitforexit 行之后。这是在大概的范围内,还是有更好的方法?
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
Arguments = @$"dotnet new foundation -n HelloApiWorld -e ""Hello"" -en ""hello"" -la ""h""",
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = false,
WorkingDirectory = @"C:\testoutput"
}
};
process.Start();
process.BeginOutputReadLine();
process.WaitForExit();
您正在使用 cmd.exe 作为启动进程,它不会自动结束执行。我不确定您用于创建新项目的模板。
请直接使用 DotNet cli 来执行您的命令,以便执行完成后它会自动关闭。
尝试使用以下示例使用控制台模板创建一个新项目。
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "dotnet",
Arguments = @$"new console -o myApp",
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = false,
WorkingDirectory = @"C:\testoutput"
}
};
process.Start();
process.BeginOutputReadLine();
process.WaitForExit();
所以我想直接从我的 c# 代码创建新的 dotnet 项目,大概是通过 运行 一个 dotnet new
命令或类似的东西,但我找不到它的语法。我在谷歌上搜索过的几乎所有内容都与如何通过 VS GUI 或 CLI 创建项目有关,留待讨论。
我已经尝试了几次类似这样的不同迭代,但没有成功。它只是挂在 运行 waitforexit 行之后。这是在大概的范围内,还是有更好的方法?
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
Arguments = @$"dotnet new foundation -n HelloApiWorld -e ""Hello"" -en ""hello"" -la ""h""",
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = false,
WorkingDirectory = @"C:\testoutput"
}
};
process.Start();
process.BeginOutputReadLine();
process.WaitForExit();
您正在使用 cmd.exe 作为启动进程,它不会自动结束执行。我不确定您用于创建新项目的模板。
请直接使用 DotNet cli 来执行您的命令,以便执行完成后它会自动关闭。
尝试使用以下示例使用控制台模板创建一个新项目。
var process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "dotnet",
Arguments = @$"new console -o myApp",
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = false,
WorkingDirectory = @"C:\testoutput"
}
};
process.Start();
process.BeginOutputReadLine();
process.WaitForExit();