diff --git a/README.md b/README.md index 783087c..4f62a22 100644 --- a/README.md +++ b/README.md @@ -1 +1,84 @@ -# WebView2Demo \ No newline at end of file +# WPF WebView2 混合开发 Demo + +本项目展示了如何使用 WPF 和 Vue 3 (Vite) 构建高性能的桌面混合应用。通过 WebView2 控件实现前后端深度交互,并提供了一套标准化的通信网关。 + +## 🚀 核心特性 + +- **标准化通信网关**:基于“请求/响应信封”协议,支持泛型参数解析。 +- **动态路由分发**:后端使用反射机制自动扫描 `[WebApiControl]` 和 `[WebAction]` 特性,无需繁琐的 `switch-case`。 +- **前后端分离开发**:Vue 端支持热更新调试,WPF 端支持 Host Object 注入。 +- **一键合并发布**:提供 PowerShell 脚本,自动编译 Vue 并嵌入 WPF 运行,实现绿色离线运行。 + +## 📂 项目结构 + +```text +WebView2Demo/ +├── WebView2Demo/ # WPF 项目 (C#) +│ ├── WebInterop/ # 互操作核心逻辑 (网关、路由、特性) +│ ├── Models/ # 共享的数据模型 +│ └── wwwroot/ # 发布时存放 Vue 编译产物的目录 +├── web-app/ # Vue 3 前端项目 (Vite) +│ ├── src/ +│ │ ├── AppLogic.js # 抽离的业务逻辑 +│ │ └── utils/interop.js # 前端通信工具类 +├── publish.ps1 # 一键发布脚本 +└── README.md +``` + +## 🛠️ 环境准备 + +- **后端**: .NET 10.0 SDK, Visual Studio 2022 或 Trae IDE +- **前端**: Node.js (建议 v18+), npm +- **运行时**: 已安装 Microsoft Edge WebView2 Runtime + +## 💻 开发调试指南 + +### 1. 启动前端 +```bash +cd web-app +npm install +npm run dev +``` +*默认端口通常为 5173 或 5174,请确认控制台输出。* + +### 2. 启动后端 (WPF) +- 确保 [MainWindow.xaml.cs](file:///d:/Codes/Learning/WPF/WebView2Demo/WebView2Demo/MainWindow.xaml.cs) 中的 `webView.Source` 端口与 Vue 运行端口一致。 +- 在根目录执行以下命令启动: +```bash +dotnet run --project WebView2Demo/WebView2Demo.csproj +``` +- 或者在 IDE 中直接按 `F5` 启动。 + +## 📦 合并发布 (生成分发包) + +运行根目录下的 PowerShell 脚本,它会自动清理旧产物、编译前端、同步资源并发布后端: + +```powershell +./publish.ps1 +``` + +发布完成后,产物将存放在根目录的 **`Publish`** 文件夹中。双击 `WebView2Demo.exe` 即可运行。 + +## 🔌 通信示例 + +### 前端调用后端 +```javascript +import { InteropHelper } from './utils/interop' + +// 调用 C# 业务逻辑 +const result = await InteropHelper.callApi('Calculate', { a: 10, b: 20 }); +``` + +### 后端定义业务 (C#) +```csharp +[WebApiControl] +public class MyService { + [WebAction("Calculate")] + public int Add(CalculationParams p) => p.A + p.B; +} +``` + +## 📝 调试技巧 + +- **前端断点**:在 WPF 运行窗口中右键点击“检查 (Inspect)”,在弹出的 DevTools 中调试 Vue 代码。 +- **强制断点**:在 JS 中写入 `debugger;` 语句可强制触发 DevTools 断点。 \ No newline at end of file