@echo off chcp 65001 >nul 2>&1 cd /d "%~dp0" title MilliSim4 前后端打包工具 echo ======================================== echo MilliSim4 前后端打包脚本 echo 后端 -^> publish\backend\ echo 前端 -^> publish\frontend\ echo ======================================== echo. REM ===== 1. 停止后端进程(释放 bin 目录锁)===== echo [1/4] 停止后端进程... set "killed=0" for /f "tokens=5" %%a in ('netstat -ano ^| findstr ":5000 " ^| findstr "LISTENING"') do ( echo - 停止进程 PID: %%a taskkill /F /PID %%a >nul 2>&1 set "killed=1" ) taskkill /F /IM MilliSim.Api.exe >nul 2>&1 if "%killed%"=="1" ( echo - 已停止后端进程,等待端口释放... timeout /t 2 /nobreak >nul ) else ( echo - 没有发现运行中的后端进程 ) echo. REM ===== 2. 打包后端 (Release) ===== echo [2/4] 打包后端 (Release)... if not exist "%~dp0backend\MilliSim.Api\MilliSim.Api.csproj" ( echo [错误] 未找到后端项目文件! pause exit /b 1 ) dotnet publish "%~dp0backend\MilliSim.Api\MilliSim.Api.csproj" -c Release -o "%~dp0publish\backend" --nologo if %errorlevel% neq 0 ( echo. echo [错误] 后端打包失败!请检查编译错误。 pause exit /b 1 ) echo 后端打包完成 -^> publish\backend\ echo. REM ===== 3. 打包前端 (Production) ===== echo [3/4] 打包前端 (Production)... if not exist "%~dp0frontend\package.json" ( echo [错误] 未找到前端项目文件! pause exit /b 1 ) cd /d "%~dp0frontend" call npm run build if %errorlevel% neq 0 ( echo. echo [错误] 前端打包失败!请检查编译错误。 pause exit /b 1 ) cd /d "%~dp0" echo 前端编译完成 echo. REM ===== 4. 复制前端产物到 publish\frontend ===== echo [4/4] 复制前端产物到 publish\frontend\... REM 清空旧的产物目录 if exist "%~dp0publish\frontend\" rmdir /s /q "%~dp0publish\frontend\" 2>nul mkdir "%~dp0publish\frontend\" 2>nul REM 复制新产物(含 frontend\public\web.config,Vite 构建时会自动拷贝到 dist\) xcopy "%~dp0frontend\dist\*" "%~dp0publish\frontend\" /E /Y /Q >nul 2>&1 if %errorlevel% neq 0 ( echo [错误] 复制前端产物失败! pause exit /b 1 ) echo - 已复制前端产物(含 web.config) echo. REM ===== 完成 ===== echo ======================================== echo 打包完成! echo ======================================== echo. echo 后端产物: %~dp0publish\backend\ echo 前端产物: %~dp0publish\frontend\ echo. echo 部署说明: echo 1. 服务器需安装 .NET 10 Hosting Bundle echo 2. 服务器需安装 IIS URL Rewrite 模块 echo 3. 后端:publish\backend\ 部署为 IIS 站点(应用池: 无托管代码) echo 4. 前端:publish\frontend\ 部署为独立 IIS 站点 echo 5. 配置前端的 API 反向代理指向后端地址 echo. pause