【问题标题】:How to create dotnet core project using c# code?如何使用 C# 代码创建 dotnet 核心项目?
【发布时间】:2020-04-02 12:16:23
【问题描述】:

我们可以使用 dotnet core 命令行创建解决方案和项目。但我想在我的网络应用程序中运行这些命令并自动创建一个项目并下载它。

[HttpPost("create")]
public async Task<IActionResult> Create([FromBody] string projectName)
{
    // dotnet dotnet new sln --name projectName

   return created solution zip file
}

这可能吗?

【问题讨论】:

  • 如果 sdk 安装在运行 Web 应用程序的机器上,您可以为此调用 dotnet cli
  • 如何从应用程序调用 cli?
  • 同任何命令行一样,有很多关于它的问题,比如这个Run command line code programmatically using C#
  • 服务器的安全策略和限制不会让你直接运行 'dotnet' 进程。我只看到一种解决方案。您可以在旁边创建模板,然后您可以重命名代码中的内容,将它们打包并发回给用户。
  • 创建所有项目模板并将它们保存为 Zip 文件,然后将其作为文件响应返回。没有安全问题的简单解决方案。

标签: c# asp.net-core .net-core


【解决方案1】:

我没有测试过这段代码,但它应该是这样的

[HttpGet("create-proj")]
public ActionResult CreatProject(string name)
{
    var args = "dotnet dotnet new sln --name {name}";

    var p = new Process
    {
        StartInfo = new ProcessStartInfo
        {
            FileName = "cmd.exe",
            Arguments = args,
            RedirectStandardOutput = true,
            RedirectStandardError = true,
            UseShellExecute = false,
            CreateNoWindow = true,
            WorkingDirectory = Directory.GetCurrentDirectory(),
        }
    };

    p.Start();
    p.WaitForExit();

   // Zip solution in WorkingDirectory and return that file
}

确保您在机器上安装了 .NET Core SDK。

【讨论】:

  • 它会抛出“拒绝访问”
  • 你有新的管理员权限来启动外部进程。
  • 如何发布后端来执行管理任务?我认为这不是这一切的本质,另外,我认为它可以启动一个进程,但前提是它位于本地路径中而不是外部路径中,并且不需要管理员权限。
  • 嗯,有几种方法可以处理与您的实际问题无关的权限。当然,在这种情况下你应该考虑安全问题。
  • 那么,请在您的代码中处理权限并将其发布到其工作版本中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
  • 2020-04-01
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多