@echo off setlocal enabledelayedexpansion echo ======================================== echo YY.Admin 应用程序发布脚本 echo ======================================== echo. REM 显示当前目录 echo 当前目录: %cd% echo. REM 检查是否在项目目录中 if not exist "YY.Admin.csproj" ( echo [错误] 当前目录没有找到项目文件 YY.Admin.csproj echo 请确保在项目根目录运行此脚本 echo 预期项目文件: YY.Admin.csproj echo. REM 尝试在上级目录查找 echo 正在搜索项目文件... dir /s /b *.csproj 2>nul echo. pause exit /b 1 ) REM 检查 .NET SDK 是否可用 dotnet --version >nul 2>&1 if errorlevel 1 ( echo [错误] 未找到 .NET SDK 或未安装 echo 请安装 .NET SDK 并确保 dotnet 命令可用 echo. pause exit /b 1 ) REM 显示项目信息 echo 项目文件: YY.Admin.csproj echo. REM 清理发布目录 if exist "publish" ( echo [1/4] 清理旧发布文件... rmdir /s /q "publish" if errorlevel 1 ( echo [错误] 无法清理发布目录,可能有文件被占用 echo 请关闭所有可能占用文件的程序后重试 echo. pause exit /b 1 ) ) else ( echo [1/4] 创建发布目录... mkdir "publish" >nul 2>&1 ) REM 发布应用程序 echo [2/4] 正在发布应用程序... dotnet publish -c Release -r win-x64 -o "publish" --self-contained true -p:PublishSingleFile=true if errorlevel 1 ( echo [错误] 应用程序发布失败! echo 请检查项目配置和错误信息 echo. pause exit /b 1 ) REM 菜单与业务数据在 SQLite;项目根下常为最新最全的一份,dotnet publish 默认不会带上 if exist "Admin.NET.db" ( copy /Y "Admin.NET.db" "publish\" >nul echo 已复制 Admin.NET.db(与项目根一致,含菜单等配置) ) if exist "Slave.db" ( copy /Y "Slave.db" "publish\" >nul echo 已复制 Slave.db ) REM 创建 Updates 目录并复制版本文件 echo [3/4] 配置自动更新文件... if not exist "publish\Updates" mkdir "publish\Updates" if exist "version.xml" ( copy "version.xml" "publish\Updates\" >nul echo 版本文件已复制 ) else ( echo 警告: 未找到 version.xml 文件,自动更新功能可能无法正常工作 echo 请在项目根目录创建 version.xml 文件 ) REM 复制其他必要文件(如果有) if exist "AppSettings.json" ( copy "AppSettings.json" "publish\" >nul 2>&1 echo 配置文件已复制 ) if exist "Resources" ( xcopy "Resources" "publish\Resources" /E /I /Y >nul 2>&1 echo 资源文件已复制 ) REM 显示发布结果 echo [4/4] 发布完成! echo. echo ======================================== echo 发布摘要: echo ======================================== echo 发布目录: %cd%\publish echo. REM 显示生成的主要文件 set "exeFile=" for %%f in (publish\*.exe) do set "exeFile=%%f" if defined exeFile ( echo 主要文件: echo !exeFile! echo. echo 文件大小: for %%f in (!exeFile!) do echo %%~zf 字节 ) else ( echo [警告] 未找到可执行文件 ) echo. echo 目录内容: dir publish /B echo. echo ======================================== echo 下一步操作: echo 1. 测试发布的应用: 双击 publish\!exeFile! 运行测试 echo 2. 打包分发: 将整个 publish 目录打包分发 echo 3. 配置自动更新: 更新服务器上的 version.xml 文件 echo ======================================== echo. echo. echo 发布流程完成! pause