从源码构建
环境要求
- Windows 10+
- .NET 10 SDK(使用本机安装的 SDK,不通过
global.json固定版本) - Git
界面是原生 WPF,构建与运行不需要 Node.js。只有克隆文档站并本地预览时才需要 Node.js 20+。
克隆与运行(开发)
git clone https://github.com/pengcunfu/DevEnv.git
cd DevEnv
dotnet restore
dotnet build DevEnv.sln -c Debug
# 启动主程序(WPF)
make run CONFIG=Debug
编译产物位于各项目自己的 bin/、obj/ 目录,例如 DevEnv/bin/Debug/net10.0-windows/DevEnv.exe、DevEnv.Core/bin/Debug/net10.0-windows/。make clean 会清理各项目产物,并兼容清理旧的仓库根目录 bin/、obj/ 残留。
设置 DarkMode 为 true(或在「设置」页勾选深色模式)即可切换深色主题。调试时可用环境变量直接启动到指定页:DEVENV_START_PAGE=lava make run。
本地发布(单文件)
仓库提供了发布脚本:框架依赖单文件发布(目标机需装对应 .NET Desktop Runtime):
.\scripts\publish.ps1 # 默认 Release / win-x64
.\scripts\publish.ps1 -Zip # 额外生成 DevEnv-<ver>-win-x64.zip
等价的手动流程:
dotnet publish DevEnv/DevEnv.csproj ^
-c Release ^
-r win-x64 ^
--self-contained false ^
-p:PublishSingleFile=true ^
-p:IncludeNativeLibrariesForSelfExtract=true ^
-o ./publish/win-x64
在 publish/win-x64 目录运行 DevEnv.exe。
本地打包 Velopack 安装器(可选)
发布由 GitHub Actions 全自动完成;本地联调时可安装 vpk 工具链手动打包:
dotnet tool install -g vpk --version 1.2.0
vpk pack -u DevEnv -v 1.2.0 -r win-x64 ^
-p ./publish/win-x64 -o ./publish/velopack ^
-e DevEnv.exe --packTitle DevEnv --packAuthors FireNeb ^
-i DevEnv/Resources/icon.ico --framework net10-x64-desktop
本地全流程联调更新时,可将 DEVBOX_UPDATE_FEED 环境变量指向本地目录或 HTTP 地址,替代 GitHub Releases 作为更新源。
修改版本号
发布前请同步以下位置:
- 根目录
VERSION DevEnv/DevEnv.csproj中的<Version>等属性CHANGELOG.md对应版本条目
应用内版本从程序集信息读取。
文档站点(Vue + Vite → Cloudflare Pages)
项目名:devbox-docs · 线上地址:**https://devenv.cn/**(备用 https://devbox-docs.pages.dev/)
站点首页是 Vue 组件,指南正文仍以 Markdown 维护在 website/guide/,由 markdown-it 渲染,不再使用 VitePress。
cd website
npm install
npm run dev # 本地预览(Vite 开发服务器)
npm run build # 预渲染静态页面到 website/dist
npm run preview # 本地预览构建产物
npm run deploy # 构建并部署(等价于 .\deploy.ps1)
本地一键部署
website/deploy.ps1 会检查 Cloudflare 登录(未登录自动 wrangler login)、必要时创建 Pages 项目,再部署 dist/。也可使用 API Token:设置 CLOUDFLARE_API_TOKEN(建议同时设置 CLOUDFLARE_ACCOUNT_ID)。
推送至 master/main 且变更 website/** 时,GitHub Actions 会调用 wrangler 部署到同一 Pages 项目。仓库需配置 Secrets:
CLOUDFLARE_API_TOKEN(Cloudflare Pages: Edit)CLOUDFLARE_ACCOUNT_ID