WinForms / WPF / Blazor 项目模板详解

一句话定位: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个模板

  1. 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个模板

  1. 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 中 跨端混合客户端,一套组件网页+桌面

五、选型建议

  1. 只做Windows简单工具、上位机、维护老系统 → WinForms
  2. Windows桌面,要求界面精致、图表动画、MVVM、高DPI → WPF
  3. B/S网页系统、管理后台,C#全栈开发 → Blazor Web App(优先Auto或Server)
  4. 想要一套UI同时跑网页 + Windows桌面客户端 → Blazor Hybrid(WinForms/WPF承载WebView)
  5. 需要离线Web前端、静态站点,不用常驻后端 → 独立Blazor WebAssembly Standalone
相关推荐
1-1=04 小时前
.NET Core 内存管理
.net·.netcore
无风听海10 小时前
.NET 10之Span技术总结
.net
1-1=011 小时前
.NET Core 配置与选项
.net·.netcore·1024程序员节
mudtools11 小时前
在飞书 SDK 上用 Microsoft Agent Framework 搭一个能干活的工作搭子
人工智能·ai·.net·飞书·agent
ChaITSimpleLove11 小时前
Layout.WatchDog.NET 1.5.0-beta.3 发布:统一全后端雪花 ID 策略,数据库能力矩阵一览
.net·watchdog·日志记录器·节点资源监控看板·.net专属轻量级日志中心
IT规划师12 小时前
MQTT 实战 - 放下炫技,8 年踩坑的真心话与方法论(收官)
物联网·.net
CSharp精选营12 小时前
.NET 接口从 800ms 干到 60ms:生产环境这几个优化点最关键
性能优化·c#·.net·efcore
CSharp精选营1 天前
制造业 ERP 物料建模:主料、辅料和 BOM 到底怎么拆才稳
.net·erp·bom·制造业·物料建模