当前位置: 首页 > news >正文

一键创建netcore8.0项目

配置模版略

直接上代码:

using Microsoft.AspNetCore.Mvc;
using System.Diagnostics;
using System.IO.Compression;namespace SaaS.OfficialWebSite.Web.Controllers
{public class ProjectGenController : Controller{public IActionResult Index(){return View();}[HttpPost]public async Task<IActionResult> GenerateProject([FromBody] ProjectRequest request){if (string.IsNullOrWhiteSpace(request.ProjectName) ||!System.Text.RegularExpressions.Regex.IsMatch(request.ProjectName, @"^[A-Za-z0-9_\-]+$")){return BadRequest("项目名称只能包含字母、数字、下划线和连字符");}try{// 创建临时目录var tempDir = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());Directory.CreateDirectory(tempDir);// 执行 dotnet new 命令var processStartInfo = new ProcessStartInfo{FileName = "dotnet",Arguments = $"new unt-template -n {request.ProjectName} -o {tempDir}",RedirectStandardOutput = true,RedirectStandardError = true,UseShellExecute = false,CreateNoWindow = true,// 添加环境变量Environment ={["USERPROFILE"] = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),["HOME"] = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)}};using (var process = Process.Start(processStartInfo)){await process.WaitForExitAsync();if (process.ExitCode != 0){var error = await process.StandardError.ReadToEndAsync();return BadRequest($"项目生成失败: {error}");}}// 创建内存流用于zip文件var memoryStream = new MemoryStream();using (var zipArchive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true)){// 递归添加所有文件到zipawait AddDirectoryToZip(zipArchive, tempDir, "");}// 清理临时目录Directory.Delete(tempDir, true);// 返回zip文件memoryStream.Position = 0;return File(memoryStream, "application/zip", $"{request.ProjectName}.zip");}catch (Exception ex){return StatusCode(500, $"服务器错误: {ex.Message}");}}private async Task AddDirectoryToZip(ZipArchive zipArchive, string sourceDir, string entryPrefix){foreach (var file in Directory.GetFiles(sourceDir)){var entryName = Path.Combine(entryPrefix, Path.GetFileName(file));var entry = zipArchive.CreateEntry(entryName);using (var entryStream = entry.Open())using (var fileStream = System.IO.File.OpenRead(file)){await fileStream.CopyToAsync(entryStream);}}foreach (var dir in Directory.GetDirectories(sourceDir)){var dirName = Path.GetFileName(dir);var newEntryPrefix = Path.Combine(entryPrefix, dirName);await AddDirectoryToZip(zipArchive, dir, newEntryPrefix);}}}public class ProjectRequest{public string ProjectName { get; set; }}
}

运行效果:Necore项目生成器

http://www.dtcms.com/a/288527.html

相关文章:

  • 电机相关常见名词
  • 国产电科金仓数据库金仓KES V9 2025:AI时代的数据库融合标杆
  • Temperature 是在LLM中的每一层发挥作用,还是最后一层? LLM中的 Temperature 参数 是怎么计算的
  • 信息学奥赛一本通 1579:【例 5】皇宫看守 | 洛谷 P2458 [SDOI2006] 保安站岗
  • 明细列表,明细grid中的默认按钮失效,配置按钮失效
  • Solidity 中的`bytes`
  • [AI风堇]基于ChatGPT3.5+科大讯飞录音转文字API+GPT-SOVITS的模拟情感实时语音对话项目
  • min-max容斥学习笔记
  • 线性回归问题
  • MC0463四大名著-水浒签到
  • 智慧酒店房价牌系统,国际版,海外版 的设计与应用价值研究———仙盟创梦IDE
  • NX二次开发常用函数——从一个坐标系到另一个坐标系的转换(UF_MTX4_csys_to_csys )相同体坐标转化
  • 文献精读:青藏高原东北部青海湖流域沿海拔分布的蒸散量及其主要影响因素
  • 问津集 #1:Rethinking The Compaction Policies in LSM-trees
  • 计算机组成原理20250719——计算机系统概述
  • 创建套接字并bind的详细过程
  • 图片放大镜案例
  • 关于Spring RestTemplate
  • Java多线程进阶
  • 【计算机网络架构】树型架构简介
  • openmv循迹
  • 基于Scrapy-Redis的分布式爬虫系统:工业级实现与深度优化
  • Linux系统日志管理入门:journalctl命令完全指南
  • Python关于numpy的基础知识
  • 物理AI是什么技术?
  • LVS实验步骤解析
  • yolo8实时识别目标(和平精英敌人+骨骼关键点)
  • 云计算与 DevOps(开发与运维)
  • 分立元件线性稳压器12V转5VMultisim仿真
  • [FFmpeg] 输入输出访问 | 管道系统 | AVIOContext 与 URLProtocol | 门面模式