6 步在 Windows 上做出 .NET MAUI 应用:从环境到发布的实战指南
【免费下载链接】maui.NET MAUI is the .NET Multi-platform App UI, a framework for building native device applications spanning mobile, tablet, and desktop.项目地址: https://gitcode.com/GitHub_Trending/ma/maui
还在用 WinForms 写 Windows 桌面工具,下一季度老板却要求"手机上也要有"?重写一套代码?不必。.NET MAUI 让你用一份 C# 代码同时交付 Windows、Android、iOS 和 macOS 的原生应用。这篇实战指南带你走完 MAUI 环境安装、建项目、写界面、打包 MSIX 的每一步,跟着做即可上手。
30 秒认知卡
| 项目 | 说明 |
|---|---|
| 定位 | Xamarin.Forms 的进化版,面向 Windows、macOS 的跨平台原生应用框架 |
| 支持平台 | iOS、Android、Windows、macOS |
| 技术栈 | C# + XAML(声明式标记语言,类似 HTML) |
| 适合谁 | .NET 开发者、想转跨平台的 Windows 开发者、移动端新手 |
动手前:一张 Windows 环境检查清单 📋
先对照下面这张表自检,缺哪项补哪项,能省掉后面 80% 的折腾:
| 检查项 | 要求 |
|---|---|
| 操作系统 | Windows 10 1809 及以上,或 Windows 11(必须 64 位) |
| 内存 | 8 GB 起步,推荐 16 GB |
| 虚拟化 | 处理器支持 Hyper-V(跑 Android 模拟器要用) |
| 开发工具 | Visual Studio 2022(社区版即可) |
| 关键组件 | 安装时勾选"移动开发与 .NET"工作负载,并确认其中的.NET MAUI组件 |
安装动作只有三步:
- 打开 Visual Studio 2022 安装器,进入"工作负载"页。
- 勾选"移动开发与 .NET",在右侧组件栏确认 .NET MAUI 已勾选。
- 点"修改"装完,顺手创建个空白 MAUI 项目编译一次,工具链就通了。
第一次运行:5 分钟建起并跑通项目 🏁
打开 Visual Studio,选"创建新项目",搜索框输入MAUI,选 ".NET MAUI App" 模板,命名后创建。
新项目的目录长这样,先混个脸熟:
MauiProgram.cs:应用入口,服务注册都在这App.xaml/AppShell.xaml:根界面与导航壳MainPage.xaml:你的第一页Platforms/:Windows、Android、iOS 各自的差异代码Resources/:图标、字体、图片等素材- 项目文件(
.csproj):目标框架与打包配置
.csproj里决定"这份代码要编译到哪些平台":
<TargetFrameworks>net8.0-android;net8.0-ios;net8.0-maccatalyst;net8.0-windows10.0.19041.0</TargetFrameworks>只在 Windows 上开发?把其他几段删掉,只留net8.0-windows10.0.19041.0,编译会快一大截。
然后按 F5,默认目标就是 Windows,第一版应用就在你桌面上跑起来了。
布局速查:用 XAML 拼出界面 🧱
XAML 是描述"界面长什么样"的标记语言,属性写在标签里,改一行刷一下就能看到效果。常用容器速查如下:
| 容器 | 干什么用 | 一句话理解 |
|---|---|---|
VerticalStackLayout/HorizontalStackLayout | 垂直/水平排列子元素 | 把卡片一列列摆好 |
Grid | 行列网格 | 一张 Excel 表格 |
ScrollView | 包裹可滚动内容 | 可上下拉长的画布 |
一个能直接用的页面骨架:
<ScrollView> <VerticalStackLayout Spacing="20" Padding="30"> <Image Source="dotnet_bot.png" HeightRequest="180" HorizontalOptions="Center" /> <Label Text="Hello, Windows!" FontSize="28" HorizontalOptions="Center" /> <Button Text="点我" Clicked="OnCounterClicked" HorizontalOptions="Center" /> </VerticalStackLayout> </ScrollView>想要多列就多上Grid:给它RowDefinitions="Auto,*"和ColumnDefinitions="*,2*",再用Grid.Row、Grid.Column指定每个控件落在哪一格,表单类界面基本都能搞定。
示例工程Resources/Images里自带现成素材,比如 photo.jpg,写进<Image>的Source就能加载:
让数据动起来:数据绑定与 MVVM 🧑🍳
想象一家餐厅:View 是大堂,顾客只能看到桌面和菜单;ViewModel 是服务员,把顾客需求转成订单、把端上来的菜摆好;Model 是厨房,真正干活的是它。三者各干各的,换装修(改 UI)不用动厨房。
落到 MAUI 术语上就是:{Binding OrderCount}把界面属性接到 ViewModel 属性上,数据一变,UI 自动刷新。而"通知 UI 刷新"靠的是INotifyPropertyChanged接口——它是 ViewModel 上挂的一只铃铛,属性一改就摇铃:
public class MainViewModel : INotifyPropertyChanged { private int _count; public int Count { get => _count; set { _count = value; OnPropertyChanged(); } } public event PropertyChangedEventHandler? PropertyChanged; void OnPropertyChanged() => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Count))); }页面加载时一行代码把 ViewModel 交给界面:BindingContext = new MainViewModel();。之后 XAML 里写Text="{Binding Count}",计数器就活了。
质量把关:调试与测试你的 MAUI 应用 🧪
- 本地调试:目标选 Windows,打断点按 F5,和调试普通 .NET 程序完全一样。
- 模拟器与真机:Android 用模拟器或 USB 真机;iOS 需要 Mac 上的模拟器。在工具栏的目标设备下拉框里切换即可。
- 单元测试:加一个 xUnit 测试项目,引用主项目,把 ViewModel 当普通类测:
[Fact] public void Count_Increases_When_Added() { var vm = new MainViewModel(); vm.Count++; Assert.Equal(1, vm.Count); }业务逻辑放 ViewModel,意味着绝大部分代码不依赖任何平台 API,一台 Windows 机器上就能把测试全跑绿。真要看 UI 层面的回归,参考 docs/UITesting-Guide.md,它演示了如何用 UI 测试框架对比截图——失败了大概长这样:
上架:一键生成 MSIX 应用包 📦
MAUI 的 Windows 产物是MSIX(Windows 应用包格式,类似 Android 的 APK),发布路径有两条:
- 侧载:把
.msix文件直接发给同事,装完即用,适合内部工具。 - Microsoft Store:提交商店审核,面向公开分发。
两种方式都能走:Visual Studio 里右键项目 →"发布" → 选 Windows,按向导勾"生成应用包"即可。习惯命令行的话:
dotnet publish -f net8.0-windows10.0.19041.0 -p:WindowsPackageType=MSIX跑完在输出目录里拿到.msix,双击安装,版本号和包名在项目的打包属性里配置。
避坑清单:MAUI Windows 开发高频 5 问 ❓
Q1:编译一次要等好几分钟?正常,多目标框架会编译所有平台。只留 Windows 目标(见前文.csproj的TargetFrameworks),日常开发快得多。
Q2:报"找不到 .NET MAUI 工作负载"或组件缺失?打开 VS Installer 重新勾选"移动开发与 .NET"和 .NET MAUI 组件,装完重启 IDE。
Q3:怎么给控件加自定义属性?别只写普通字段,用BindableProperty.Create(nameof(Radius), typeof(double), typeof(MyView), 0d)创建可绑定属性,XAML 里才能直接赋值。
Q4:列表一长就卡?三条药方:减少嵌套层级(Grid替代层层套的StackLayout)、长列表启用虚拟化、耗时操作移出 UI 线程(async异步)。
Q5:Windows 上样式和文档图对不上?Windows 端由 WinUI 原生渲染,平台差异代码集中在Platforms/Windows/目录,先翻这里再怀疑框架。
收尾:接下来做什么 🚀
给你三个具体动作,今晚就能开始:
- 用 10 分钟做一个计数器小应用,走完"建项目 → F5 → 加绑定"全流程。
- 挑现有某个 Windows 内部工具的一个页面,用 MAUI 重写一遍试试手感。
- 按发布章节打出第一个 MSIX,侧载到另一台机器验证。
延伸资料,都在仓库里:
- 开发指南:docs/DevelopmentTips.md
- UI 测试指南:docs/UITesting-Guide.md
- 可运行的控件示例应用:src/Controls/samples/
- 仓库入口:https://gitcode.com/GitHub_Trending/ma/maui
【免费下载链接】maui.NET MAUI is the .NET Multi-platform App UI, a framework for building native device applications spanning mobile, tablet, and desktop.项目地址: https://gitcode.com/GitHub_Trending/ma/maui
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考