|
1 | 1 | # VSCode Dotnet Deploy |
2 | 2 |
|
3 | | -一键部署 .NET 应用到 Ubuntu/Linux 服务器的 VSCode 插件。 |
| 3 | +一键部署 .NET 应用到服务器或打包为桌面应用的 VSCode 插件。 |
4 | 4 |
|
5 | | -## 功能 |
| 5 | +## ✨ 功能特性 |
6 | 6 |
|
| 7 | +### 🚀 部署功能 |
7 | 8 | - 🔍 自动扫描解决方案中的可执行项目 |
8 | 9 | - 📦 可配置的发布选项(self-contained、single-file、debug symbols) |
9 | 10 | - 🚀 支持 SSH 密钥或密码认证连接服务器 |
10 | 11 | - 📤 SFTP 上传发布产物 |
11 | 12 | - ▶️ 远程执行 systemd 启动命令 |
12 | | -- 🔧 **Native AOT 交叉编译** (macOS → Linux/Windows) |
13 | 13 |
|
14 | | -## Native AOT 交叉编译 |
15 | | - |
16 | | -插件支持从 macOS 交叉编译 Native AOT 应用到 Linux 和 Windows,无需安装 NuGet 包。 |
17 | | - |
18 | | -### 功能特点 |
| 14 | +### 🔧 Native AOT 交叉编译 |
19 | 15 | - 🐧 **Linux 目标**: 自动使用 Zig 作为链接器 |
20 | 16 | - 🪟 **Windows 目标**: 自动使用 LLD 链接器和 Windows SDK |
21 | 17 | - 🛠️ **工具链管理**: 提供可视化安装向导和一键安装功能 |
22 | 18 | - 📦 **零配置**: 自动检测并配置所有必要的 MSBuild 参数 |
23 | 19 |
|
24 | | -### 快速开始 |
25 | | -1. 打开侧边栏的 Dotnet Deploy |
26 | | -2. 勾选 **Native AOT 编译** |
27 | | -3. 选择目标运行时 (如 `linux-x64` 或 `win-x64`) |
28 | | -4. 如果缺少工具链,会显示"配置向导"按钮 |
29 | | -5. 点击按钮按照指引安装所需工具 (Zig, LLD, xwin 等) |
| 20 | +### 📦 UPX 压缩 |
| 21 | +- 🗜️ 支持 Linux 和 Windows 目标的可执行文件压缩 |
| 22 | +- 📊 可选压缩级别:`-1`、`-9`、`--best`、`--lzma` |
| 23 | +- ⚠️ macOS 目标不支持(Mach-O 格式限制) |
| 24 | + |
| 25 | +### 🍎 macOS 打包 (新功能) |
| 26 | +- 📱 生成标准 `.app` 应用程序包 |
| 27 | +- 💿 生成 `.dmg` 磁盘镜像(可分发) |
| 28 | +- 📦 生成 `.pkg` 安装包 |
| 29 | +- 🎨 自定义应用图标(支持 .png 或 .icns) |
| 30 | +- 🔐 代码签名和 Apple 公证 |
| 31 | +- 🛡️ 完整的 Entitlements 配置: |
| 32 | + - App Sandbox |
| 33 | + - Hardened Runtime |
| 34 | + - 网络权限(客户端/服务器) |
| 35 | + - 文件系统权限 |
| 36 | + - 硬件访问权限(摄像头、麦克风等) |
| 37 | + |
| 38 | +### 📢 Telegram 通知 |
| 39 | +- 📲 部署完成后发送通知 |
| 40 | +- 📎 可选上传构建产物到 Telegram |
30 | 41 |
|
31 | | -更多详细信息请参阅 [交叉编译配置指南](CROSS_COMPILE_SETUP.md)。 |
| 42 | +## 📋 快速开始 |
32 | 43 |
|
33 | | -## 安装 |
| 44 | +### 1. 安装插件 |
34 | 45 |
|
35 | 46 | ```bash |
36 | | -cd tools/vscode-dotnet-deploy |
| 47 | +# 从 VSIX 安装 |
| 48 | +# Extensions → Install from VSIX → 选择 .vsix 文件 |
| 49 | + |
| 50 | +# 或开发模式 |
| 51 | +git clone https://github.com/interface95/vscode-dotnet-deploy.git |
| 52 | +cd vscode-dotnet-deploy |
37 | 53 | npm install |
38 | 54 | npm run compile |
| 55 | +# 按 F5 启动调试 |
39 | 56 | ``` |
40 | 57 |
|
41 | | -安装到 VSCode: |
42 | | -```bash |
43 | | -# 方式 1: 打包安装 |
44 | | -npm install -g vsce |
45 | | -vsce package |
46 | | -# 然后在 VSCode 中:Extensions → Install from VSIX |
| 58 | +### 2. 基本使用 |
| 59 | + |
| 60 | +1. 打开包含 `.sln` 文件的工作区 |
| 61 | +2. 点击左侧边栏的 **Dotnet Deploy** 图标 |
| 62 | +3. 在下拉列表中选择要部署的项目 |
| 63 | +4. 选择部署模式: |
| 64 | + - **Deploy to Server**: 部署到远程服务器 |
| 65 | + - **Local Publish**: 本地发布(可选 macOS 打包) |
| 66 | + |
| 67 | +### 3. 部署到服务器 |
| 68 | + |
| 69 | +1. 填写服务器配置(Host, Username, Key Path) |
| 70 | +2. 配置发布选项(Runtime, Self-contained 等) |
| 71 | +3. 点击 **🚀 Deploy Now** |
| 72 | +4. 观察进度条 |
| 73 | + |
| 74 | +### 4. Native AOT 交叉编译 |
| 75 | + |
| 76 | +1. 勾选 **Native AOT 编译** |
| 77 | +2. 选择目标运行时(如 `linux-x64` 或 `win-x64`) |
| 78 | +3. 如果缺少工具链,会显示 **配置向导** 按钮 |
| 79 | +4. 点击按钮安装所需工具(Zig, LLD, xwin 等) |
| 80 | + |
| 81 | +详细配置请参阅 [交叉编译配置指南](CROSS_COMPILE_SETUP.md) |
| 82 | + |
| 83 | +### 5. macOS 打包 |
| 84 | + |
| 85 | +1. 选择目标运行时为 `osx-x64` 或 `osx-arm64` |
| 86 | +2. 勾选 **macOS 打包** |
| 87 | +3. 点击 **⚙️ 配置** 按钮打开配置面板 |
| 88 | +4. 配置应用信息: |
| 89 | + - 应用名称、Bundle ID |
| 90 | + - 版本号 |
| 91 | + - 应用图标 |
| 92 | + - 打包格式(.app / .dmg / .pkg) |
| 93 | +5. 可选配置代码签名和 Entitlements |
| 94 | +6. 点击 **Local Publish** |
| 95 | + |
| 96 | +## ⚙️ 配置说明 |
| 97 | + |
| 98 | +### 服务器配置 |
| 99 | + |
| 100 | +| 配置项 | 说明 | 默认值 | |
| 101 | +|--------|------|--------| |
| 102 | +| `server.host` | SSH 服务器主机名或 IP | - | |
| 103 | +| `server.port` | SSH 端口 | `22` | |
| 104 | +| `server.username` | SSH 用户名 | `root` | |
| 105 | +| `server.privateKeyPath` | SSH 私钥路径 | `~/.ssh/id_rsa` | |
| 106 | +| `deploy.remotePath` | 远程部署目录 | `/opt/apps` | |
| 107 | +| `deploy.afterUploadCommand` | 上传后执行的命令 | `sudo {remote_path}/{app_name} start` | |
| 108 | + |
| 109 | +### 发布选项 |
| 110 | + |
| 111 | +| 配置项 | 说明 | 默认值 | |
| 112 | +|--------|------|--------| |
| 113 | +| `publish.runtime` | 目标运行时 | `linux-x64` | |
| 114 | +| `publish.selfContained` | 独立发布(包含运行时) | `true` | |
| 115 | +| `publish.singleFile` | 发布为单文件 | `false` | |
| 116 | +| `publish.aot` | Native AOT 编译 | `false` | |
| 117 | +| `publish.trim` | 裁剪未使用代码 | `false` | |
| 118 | +| `publish.debugSymbols` | 包含调试符号 | `false` | |
| 119 | +| `publish.stripSymbols` | 剥离符号 | `false` | |
| 120 | +| `publish.invariantGlobalization` | 无全球化依赖 | `false` | |
| 121 | + |
| 122 | +### UPX 压缩 |
| 123 | + |
| 124 | +| 配置项 | 说明 | 默认值 | |
| 125 | +|--------|------|--------| |
| 126 | +| `upx.enabled` | 启用 UPX 压缩 | `false` | |
| 127 | +| `upx.level` | 压缩级别 | `--best` | |
| 128 | + |
| 129 | +> ⚠️ UPX 仅支持 Linux 和 Windows 目标,macOS Mach-O 格式不支持 |
| 130 | +
|
| 131 | +### macOS 打包 |
| 132 | + |
| 133 | +| 配置项 | 说明 | 默认值 | |
| 134 | +|--------|------|--------| |
| 135 | +| `macos.enabled` | 启用 macOS 打包 | `false` | |
| 136 | +| `macos.appName` | 应用名称 | - | |
| 137 | +| `macos.bundleId` | Bundle Identifier | `com.example.app` | |
| 138 | +| `macos.version` | 版本号 | `1.0.0` | |
| 139 | +| `macos.format` | 打包格式 | `app` | |
| 140 | +| `macos.iconPath` | 图标路径 | - | |
| 141 | +| `macos.minimumOSVersion` | 最低 macOS 版本 | `10.15` | |
| 142 | + |
| 143 | +### 交叉编译 |
| 144 | + |
| 145 | +| 配置项 | 说明 | 默认值 | |
| 146 | +|--------|------|--------| |
| 147 | +| `crossCompile.enabled` | 启用交叉编译 | `true` | |
| 148 | +| `crossCompile.zigPath` | Zig 编译器路径 | 自动检测 | |
| 149 | +| `crossCompile.xwinSdkPath` | Windows SDK 路径 | `~/.local/share/xwin-sdk` | |
| 150 | + |
| 151 | +## 📁 工作流程 |
47 | 152 |
|
48 | | -# 方式 2: 开发模式 |
49 | | -# 在 VSCode 中按 F5 启动调试 |
| 153 | +``` |
| 154 | +┌─────────────────────┐ |
| 155 | +│ 1. 选择项目 │ |
| 156 | +└──────────┬──────────┘ |
| 157 | + ▼ |
| 158 | +┌─────────────────────┐ |
| 159 | +│ 2. dotnet publish │ 编译发布 |
| 160 | +└──────────┬──────────┘ |
| 161 | + ▼ |
| 162 | +┌─────────────────────┐ |
| 163 | +│ 3. UPX 压缩 (可选) │ 压缩可执行文件 |
| 164 | +└──────────┬──────────┘ |
| 165 | + ▼ |
| 166 | + ┌──────┴──────┐ |
| 167 | + ▼ ▼ |
| 168 | +┌─────────┐ ┌─────────────┐ |
| 169 | +│ 服务器 │ │ 本地打包 │ |
| 170 | +│ 部署模式 │ │ 模式 │ |
| 171 | +└────┬────┘ └──────┬──────┘ |
| 172 | + ▼ ▼ |
| 173 | +┌─────────┐ ┌─────────────┐ |
| 174 | +│ SFTP │ │ macOS 打包 │ |
| 175 | +│ 上传 │ │ .app/.dmg │ |
| 176 | +└────┬────┘ └──────┬──────┘ |
| 177 | + ▼ ▼ |
| 178 | +┌─────────┐ ┌─────────────┐ |
| 179 | +│ 启动 │ │ 完成 │ |
| 180 | +│ 服务 │ │ │ |
| 181 | +└─────────┘ └─────────────┘ |
50 | 182 | ``` |
51 | 183 |
|
52 | | -## 配置 |
| 184 | +## 🔧 系统要求 |
53 | 185 |
|
54 | | -在 VSCode settings.json 中添加: |
| 186 | +- **本地环境** |
| 187 | + - .NET SDK 8.0+ |
| 188 | + - VSCode 1.85+ |
| 189 | + - Node.js 18+ |
55 | 190 |
|
56 | | -```json |
57 | | -{ |
58 | | - "dotnetDeploy.server.host": "your-server-ip", |
59 | | - "dotnetDeploy.server.port": 22, |
60 | | - "dotnetDeploy.server.username": "root", |
61 | | - "dotnetDeploy.server.privateKeyPath": "~/.ssh/id_rsa", |
62 | | - "dotnetDeploy.deploy.remotePath": "/opt/apps" |
63 | | -} |
64 | | -``` |
| 191 | +- **交叉编译** (可选) |
| 192 | + - Zig 0.11+(Linux 目标) |
| 193 | + - LLD + xwin(Windows 目标) |
65 | 194 |
|
66 | | -## 使用 |
| 195 | +- **UPX 压缩** (可选) |
| 196 | + - `brew install upx` |
67 | 197 |
|
68 | | -48. 打开包含 `.sln` 文件的工作区 |
69 | | -49. 点击左侧边栏的 Dotnet Deploy 图标 |
70 | | -50. 在下拉列表中选择要部署的项目 |
71 | | -51. 填写服务器配置(Host, Username, Key Path 等) |
72 | | -52. 配置发布选项(Runtime, Self-contained 等) |
73 | | -53. 点击 "🚀 Deploy Now" 按钮 |
74 | | -54. 观察下方的部署进度条 |
| 198 | +- **服务器要求** (部署模式) |
| 199 | + - SSH 密钥认证 |
| 200 | + - systemd(支持 `./程序名 start` 命令) |
75 | 201 |
|
76 | | -## 发布选项 |
| 202 | +## 📝 更新日志 |
77 | 203 |
|
78 | | -| 选项 | 说明 | |
79 | | -|------|------| |
80 | | -| Self-contained | 包含 .NET 运行时,不需要服务器安装 .NET | |
81 | | -| Single file | 打包成单个可执行文件 | |
82 | | -| Debug symbols | 包含 .pdb 调试符号文件 | |
| 204 | +### v0.1.62 |
| 205 | +- ✨ 新增 macOS 打包功能(.app/.dmg/.pkg) |
| 206 | +- ✨ 新增 Entitlements 配置面板 |
| 207 | +- ✨ 新增本地发布进度显示(编译/压缩/打包) |
| 208 | +- 🐛 修复 UPX 参数未传递的问题 |
| 209 | +- 🐛 修复 macOS 打包时循环复制的问题 |
| 210 | +- 🐛 修复 DMG/PKG 生成后临时 .app 未清理的问题 |
83 | 211 |
|
84 | | -## 工作流程 |
| 212 | +### v0.1.50 |
| 213 | +- ✨ 新增 Native AOT 交叉编译支持 |
| 214 | +- ✨ 新增工具链安装向导 |
| 215 | +- ✨ 新增 UPX 压缩支持 |
85 | 216 |
|
86 | | -``` |
87 | | -┌─────────────────┐ |
88 | | -│ 1. 选择项目 │ |
89 | | -└────────┬────────┘ |
90 | | - ▼ |
91 | | -┌─────────────────┐ |
92 | | -│ 2. dotnet pub │ 本地发布 |
93 | | -└────────┬────────┘ |
94 | | - ▼ |
95 | | -┌─────────────────┐ |
96 | | -│ 3. SFTP 上传 │ 上传到服务器 |
97 | | -└────────┬────────┘ |
98 | | - ▼ |
99 | | -┌─────────────────┐ |
100 | | -│ 4. sudo start │ 启动服务 |
101 | | -└─────────────────┘ |
102 | | -``` |
| 217 | +### v0.1.0 |
| 218 | +- 🎉 初始版本 |
| 219 | +- 基本的 SSH 部署功能 |
103 | 220 |
|
104 | | -## 要求 |
| 221 | +## 📄 License |
105 | 222 |
|
106 | | -- 服务器需要 SSH 密钥认证 |
107 | | -- 项目需要集成 systemd(支持 `./程序名 start` 命令) |
108 | | -- 本地需要安装 .NET SDK |
| 223 | +MIT |
109 | 224 |
|
110 | | -## License |
| 225 | +## 🤝 贡献 |
111 | 226 |
|
112 | | -MIT |
| 227 | +欢迎提交 Issue 和 Pull Request! |
| 228 | + |
| 229 | +[GitHub Repository](https://github.com/interface95/vscode-dotnet-deploy) |
0 commit comments