一句话定位:WinForms、WPF 是 Windows 桌面UI;Blazor 是 WebUI(也可以 Hybrid 嵌入桌面) 前置:VS 要安装「.NET桌面开发」(WinForms/WPF)、「ASP.NET和Web开发」(Blazor);区分 .NET(现代跨平台SDK)和 .NET Framework(老式)两套模板,新项目优先选 .NET 版本
一、WinForms(Windows 窗体)模板
CLI短名:winforms 底层:GDI+、封装Win32原生控件,命令式、事件驱动,拖放设计器很强
内置4个模板
- Windows 窗体应用(.NET)【最常用】 dotnet new winforms
- 入口:
Program.cs,默认Application.Run(new Form1()) - 文件:
Form1.cs(后台代码)+Form1.Designer.cs(自动生成控件布局)+Form1.resx资源 - 特点:拖拽控件、双击写事件;上手最简单;适合工控、工具、ERP客户端、老系统维护
- 局限:原生控件,自定义复杂UI、动画、高DPI适配麻烦
2.Windows 窗体应用(.NET Framework)
- 老式模板,SDK是 .NET Framework,不推荐新项目,只维护老项目
3.Windows 窗体类库 winformslib dotnet new winformslib
- 封装自定义Form、UserControl,给其他WinForms项目复用
4.WinForms 控件库(UserControl)
- 专门做可复用自定义控件(TextBox扩展、自定义面板等)
✅ 适用场景:内部桌面工具、上位机、传统进销存、快速开发、大量第三方控件库(DevExpress、Infragistics) ❌ 不适合:复杂炫酷UI、跨平台、Web端
补充:WinForms Blazor Hybrid(不是默认模板,手动引入WebView):在WinForms窗口里放BlazorWebView,跑Razor组件,混合桌面+网页UI
二、WPF(Windows Presentation Foundation)模板
CLI短名:wpf 底层:DirectX硬件加速、XAML声明式、MVVM原生友好,保留模式渲染,矢量UI
内置4个模板
- WPF 应用程序(.NET)【最常用】 dotnet new wpf
- 入口:
Program.cs,主窗口MainWindow.xaml+MainWindow.xaml.cs - XAML:界面和代码分离,支持样式、资源字典、模板、触发器、动画、3D
- 默认结构:App.xaml(全局资源、启动页)+ MainWindow
- 架构天然适合MVVM(CommunityToolkit.Mvvm)
2.WPF应用程序(.NET Framework)
- 老版本,新项目避开
3.WPF 用户控件库 wpfusercontrollib dotnet new wpfusercontrollib
- UserControl:组合现有控件封装,复用UI块
4.WPF 自定义控件库 wpfcustomcontrollib dotnet new wpfcustomcontrollib
- 继承
Control,从头写控件模板、样式,高度自定义(专业控件开发用)
✅ 适用场景:需要高颜值、动态动画、图表、大屏、MVVM架构、高DPI、缩放不失真的Windows桌面软件 ❌ 不适合:简单小工具(开发成本高于WinForms)、跨平台原生(原生WPF仅Windows)
补充:WPF Blazor Hybrid:WPF窗口内嵌BlazorWebView,XAML和Razor组件共存,混合方案
三、Blazor 模板(重点,.NET8+统一模型,变化最大)
Blazor = C#写Web前端,组件.razor;不再是传统分离 Server / Wasm 两个独立模板,.NET8+主推 Blazor Web App
1)Blazor Web App(blazor,首选,.NET8+)
arduino
dotnet new blazor
创建时可以选择交互渲染模式(单项目自由混合):
- ✅ Server(交互式服务端) :组件代码跑在服务器,SignalR双向通信;启动快、下载小;状态保存在服务端;并发高要考虑服务器压力
- ✅ WebAssembly(交互式客户端CSR) :.NET运行时下载到浏览器,C#在浏览器本地跑;离线可用、后端压力小;首屏下载包偏大
- ✅ Auto(自动模式) :首次访问先用Server交互;Wasm运行时下载完成后自动切到客户端执行
- ✅ Static SSR(静态服务端渲染,无交互) :纯页面渲染,无交互,适合内容站、博客,性能最好
目录结构特点:
App.razor:根路由Pages/:页面组件Components/:可复用组件、布局Layout- 如果开启Wasm交互,自动生成
.Client子项目,放客户端执行的组件
优势:一个模板搞定SSR/Server/Wasm/Auto,按组件粒度控制渲染模式,是微软现在主推统一模板
2)独立 Blazor WebAssembly blazorwasm(老模板,.NET7及之前主流)
arduino
dotnet new blazorwasm
两种子类型:
- Standalone 独立版:纯静态前端,无内置后端,直接部署Nginx、OSS,通过API调用后端
- Hosted 托管版 :解决方案3个项目:前端Wasm + ASP.NET Core后端 + 共享类库(前后端共享Model)
3)Blazor Server(旧独立模板,dotnet new blazorserver)
.NET7及之前单独模板;.NET8之后不再推荐单独新建,优先Blazor Web App选Server模式
- 所有组件逻辑在服务端,浏览器只传DOM变更diff包;首屏快;长连接SignalR,网络差容易卡顿
4)Blazor Hybrid(不是Web模板,MAUI/WinForms/WPF内嵌)
csharp
# 混合App模板,MAUI Blazor
dotnet new maui-blazor
核心:Blazor组件跑在原生App内嵌WebView里,不是浏览器;可以调用本机API(文件、摄像头、串口),一套Razor组件同时跑桌面/移动端
✅ Blazor适用场景:企业后台管理、WebSPA、内部系统、需要C#全栈不想写大量JS;Hybrid适合一套UI同时网页+桌面
四、横向对比速查表
| 框架 | 运行载体 | UI描述方式 | 渲染模型 | 部署目标 | 上手难度 | 典型场景 |
|---|---|---|---|---|---|---|
| WinForms | Windows桌面进程 | C#后台+控件拖拽(Designer自动代码) | GDI+、原生控件 | Windows | 低 | 工控、工具、老ERP、快速内部工具 |
| WPF | Windows桌面进程 | XAML + C# | DirectX矢量渲染,MVVM | Windows | 中高 | 大屏、可视化、动画、高颜值桌面客户端 |
| Blazor Web App | 浏览器 | Razor(.razor) + C# + HTML/CSS | SSR / Server / Wasm / Auto 可混合 | Web服务器、静态托管 | 中 | Web后台、SPA、企业Web系统 |
| Blazor Hybrid | WebView(WinForms/WPF/MAUI) | Razor | WebView渲染 | Windows/macOS/安卓/iOS | 中 | 跨端混合客户端,一套组件网页+桌面 |
五、选型建议
- 只做Windows简单工具、上位机、维护老系统 → WinForms
- Windows桌面,要求界面精致、图表动画、MVVM、高DPI → WPF
- B/S网页系统、管理后台,C#全栈开发 → Blazor Web App(优先Auto或Server)
- 想要一套UI同时跑网页 + Windows桌面客户端 → Blazor Hybrid(WinForms/WPF承载WebView)
- 需要离线Web前端、静态站点,不用常驻后端 → 独立Blazor WebAssembly Standalone