.NET MAUI 快速上手指南:基于单代码库构建跨平台原生应用 📅 发布时间:2026/9/12 13:06:09 👁 浏览次数: .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本指南以 .NET MAUI.NET Multi-platform App UI官方仓库根目录 README 为核心脉络系统讲解 .NET MAUI 的定位、环境安装、项目创建、模板体系与仓库源码结构。读完你将掌握如何使用dotnet new maui快速创建可运行于 Android、iOS、iPadOS、macOS 与 Windows 的应用理解 .NET MAUI 单一项目模型、Workload 分层设计以及如何在本地从源码构建这个开源框架本身。什么是 .NET MAUI.NET Multi-platform App UI (.NET MAUI) 是一个跨平台 UI 框架开发者可以用 C# 和 XAML 编写一次应用逻辑与界面然后构建出能运行在 Android、iOS、iPadOS、macOS 和 Windows 上的原生应用。从技术演进看.NET MAUI 是 Xamarin.Forms 的继任者它在继承移动端 Android/iOS 能力的基础上把覆盖范围扩展到了 Windows 与 macOS 桌面平台。借助 Visual Studio 的生产力工具、模拟器与 .NET 统一的 SDK、基类库和工具链开发者可以用同一套开发栈面向最广泛的设备群体交付应用。这一单代码库、多端原生的目标在本仓库的工程结构中得到直接体现——所有平台共享的代码集中在src/下的核心项目平台差异化代码则通过条件编译与Platforms/目录隔离。快速开始创建你的第一个 .NET MAUI 应用环境准备在创建项目之前需要先安装 .NET SDK 与 .NET MAUI 工作负载Workload。最简单的方式是安装包含 MAUI 工作负载的 Visual StudioWindows / Mac也可以选择 VS Code 配合 .NET MAUI Dev Kit 扩展。关键提示如果执行dotnet new maui时提示模板不可用说明尚未安装 .NET MAUI workload需要先运行以下命令dotnet workload install maui该命令会在本机安装 .NET MAUI 的 SDK 支持。关于mauiworkload 具体包含哪些组件可以查看仓库中的 WorkloadManifest.in.json清单中的VERSION等占位符会在打包时被替换为实际版本号。创建项目安装完成后使用dotnet new模板创建新应用dotnet new maui -n NewApp-n NewApp指定项目名称生成的命名空间、应用 ID 等均以此为基础模板默认名称为MauiApp1也可在-n缺省时直接使用创建时会自动执行 NuGet 包还原若希望跳过还原可加--no-restore参数。如果需要包含示例内容的完整项目模板内置示例页面、数据模型、服务与多种第三方控件可以改用示例应用模板dotnet new maui -n NewApp -sc-sc对应模板配置中的IncludeSampleContent参数见下文模板一节它会在项目中引入Syncfusion Toolkit for .NET MAUI开源——提供超过 30 个附加控件.NET MAUI Community Toolkit——提供大量 Helper 与 ViewsMVVM ToolkitCommunityToolkit.Mvvm——用于 MVVM 模式开发。运行项目创建后即可用dotnet build编译、dotnet run或直接通过 Visual Studio / VS Code 调试。默认模板目标框架覆盖 Android、iOS、Mac Catalyst 与 WindowsWinUI 3具体各平台的最低支持版本可见模板 csproj 中的SupportedOSPlatformVersion配置详见下文源码解析。从模板源码看dotnet new maui到底生成了什么模板目录与分类本仓库中dotnet new maui的模板定义位于 src/Templates/src/templates/maui-mobile/其核心配置见 template.json。除了maui.NET MAUI App之外仓库还提供了多种衍生模板模板目录说明maui-mobile/标准 .NET MAUI 应用shortName: mauimaui-blazor/使用 Blazor Hybrid 的 MAUI 应用maui-blazor-solution/含 Blazor 的 MAUI 解决方案模板maui-multiproject/多项目按平台拆分结构的 MAUI 应用maui-lib/MAUI 类库maui-contentpage-xaml/、maui-contentpage-csharp/内容页XAML / C# 两种写法maui-contentview-xaml/、maui-contentview-csharp/内容视图XAML / C#maui-window-xaml/、maui-window-csharp/窗口XAML / C#maui-resourcedictionary-xaml/资源字典maui-aspire-servicedefaults/.NET Aspire 服务默认配置模板关键参数template.json从 template.json 可以看到模板声明了以下关键配置shortName: maui即命令行中使用的模板短名identity: Microsoft.Maui.MauiApp.CSharp.*按目标框架版本区分模板实例sourceName: MauiApp.1源名称创建项目时会被替换为用户提供的项目名preferNameDirectory: true优先以目录名作为项目名IncludeSampleContent布尔参数默认false即-sc开关控制是否生成示例页面与功能applicationId字符串参数覆盖项目中的$(ApplicationId)应用标识skipRestore布尔参数跳过创建时的自动还原。其中应用 ID 的生成逻辑也定义在模板中默认应用 ID 由com.companyname.前缀拼接小写项目名得到defaultAppId符号定义见 template.json 第 155-179 行最终结果写入 csproj 的ApplicationId属性。模板生成的 csproj单一项目模型查看模板生成的 MauiApp.1.csproj可以直观理解 .NET MAUI 的单一项目Single Project模型Project SdkMicrosoft.NET.Sdk PropertyGroup TargetFrameworksDOTNET_TFM-android/TargetFrameworks TargetFrameworks Condition!$([MSBuild]::IsOSPlatform(linux)) $(TargetFrameworks);DOTNET_TFM-ios;DOTNET_TFM-maccatalyst /TargetFrameworks TargetFrameworks Condition$([MSBuild]::IsOSPlatform(windows)) $(TargetFrameworks);DOTNET_TFM-windows10.0.19041.0 /TargetFrameworks OutputTypeExe/OutputType UseMauitrue/UseMaui SingleProjecttrue/SingleProject ImplicitUsingsenable/ImplicitUsings Nullableenable/Nullable MauiXamlInflatorSourceGen/MauiXamlInflator /PropertyGroup ... /Project关键点解读SingleProjecttrue/SingleProject所有平台的代码在同一个项目中管理平台差异化代码放在Platforms/子目录如Platforms/Android/、Platforms/iOS/编译时自动按目标框架筛选多目标框架TFM同一 csproj 同时声明-android、-ios、-maccatalyst、-windows10.0.19041.0等多个目标在 Linux 上自动跳过 iOS/Mac Catalyst!IsOSPlatform(linux)条件在 Windows 上追加 WinUI 目标MauiXamlInflator等资源属性MauiIcon、MauiSplashScreen、MauiImage、MauiFont、MauiAsset等项组把图标、启动页、图片、字体与原始资源统一纳入构建管线由 src/SingleProject/Resizetizer/ 下的 Resizetizer 工具负责按平台目标尺寸自动生成资源UseMauitrue启用 .NET MAUI SDK 的构建逻辑需要mauiworkload 提供支持。模板生成的启动代码MauiProgram模板项目的 MauiProgram.cs 是 .NET MAUI 应用的启动入口采用通用主机Generic Host模式public static class MauiProgram { public static MauiApp CreateMauiApp() { var builder MauiApp.CreateBuilder(); builder .UseMauiAppApp() .ConfigureFonts(fonts { fonts.AddFont(OpenSans-Regular.ttf, OpenSansRegular); fonts.AddFont(OpenSans-Semibold.ttf, OpenSansSemibold); }); return builder.Build(); } }MauiApp.CreateBuilder()创建应用构建器其实现位于 src/Controls/src/Core/Hosting/ 目录UseMauiAppApp()注册应用主类ConfigureFonts注册自定义字体#if (IncludeSampleContent)条件块会在使用-sc参数时引入 CommunityToolkit、Syncfusion Toolkit 的宿主配置与更多示例服务注册如ProjectRepository、TaskRepository、路由页面等。.NET MAUI 的 Workload 与依赖体系mauiworkload 的分层结构dotnet workload install maui安装的内容由 WorkloadManifest.in.json 定义。该清单采用组合 继承的分层设计maui全平台同时继承maui-mobile与maui-desktopmaui-mobile继承maui-android、maui-ios、maui-tizenmaui-desktop继承maui-maccatalyst、maui-windowsmaui-core抽象打包核心程序集包括Microsoft.Maui.Sdk、Microsoft.Maui.Graphics、Microsoft.Maui.Resizetizer、Microsoft.Maui.Templates、Microsoft.Maui.Core、Microsoft.Maui.Controls、Microsoft.Maui.Controls.Build.Tasks、Microsoft.Maui.Controls.Xaml、Microsoft.Maui.Essentials等maui-blazor抽象在maui-core基础上增加Microsoft.AspNetCore.Components.WebView.Maui支撑 Blazor Hybrid 场景maui-android/maui-ios/maui-maccatalyst/maui-windows/maui-tizen在各自主平台 workload 之上叠加 MAUI 层。也就是说一个maui工作负载实际是各平台原生 workload MAUI SDK 模板 核心控件库的组合安装这也是为什么只执行一条命令即可获得全平台开发能力。仓库中的解决方案组织要深入了解 .NET MAUI 的源码可以打开仓库根目录下的解决方案文件Microsoft.Maui.sln完整解决方案Microsoft.Maui-windows.slnfWindows 开发过滤视图Microsoft.Maui-mac.slnfmacOS 开发过滤视图Microsoft.Maui-vscode.slnVS Code 专用Microsoft.Maui.BuildTasks.slnf仅构建任务源码构建前置步骤Microsoft.Maui.Packages.slnf打包相关项目。源码主体位于 src/ 目录主要包括目录内容src/Core/.NET MAUI 核心抽象、平台适配层、生命周期、图形、嵌入等src/Controls/控件库Controls、XAML、SourceGen、Build.Tasks 等src/Essentials/设备能力 API传感器、文件、分享、权限等前身为 Xamarin.Essentialssrc/Graphics/跨平台 2D 图形库与 Skia 后端src/BlazorWebView/Blazor Hybrid 的 WebView 组件含 WPF/WinForms 变体src/Templates/dotnet new项目模板src/Workload/workload 清单与 SDKsrc/Compatibility/兼容层如旧版渲染器、Material、Mapssrc/SingleProject/单一项目构建工具Resizetizer 等深入参与构建、开发与贡献从源码构建 .NET MAUI如果你希望像仓库开发者一样从源码构建 .NET MAUI 本身而不是使用现成 workload可参照 .github/DEVELOPMENT.md 的步骤安装对应版本的 .NET SDK仓库main分支通过 global.json 固定到最新稳定版 SDK打开命令行进入仓库目录先还原工具并构建构建任务Build Tasksdotnet tool restore dotnet build ./Microsoft.Maui.BuildTasks.slnfWindows 开发者在 Visual Studio 中打开Microsoft.Maui-windows.slnfmacOS/Linux 开发者可在 VS Code 中打开仓库根目录配合 .NET MAUI Dev Kit。Windows 环境构建前建议安装 VS 17.12 或更新版本、OpenJDK 17Android 构建需要并在 Mac 上安装 Xcode 以支持 iOS 构建Android SDK 缺失时 Visual Studio 会提示安装。为公共 API 生成 PublicAPI 文件如果修改代码新增了公共 API构建会因缺少 API 声明而报错。此时可用PublicApiTypeGenerate属性重新生成对应项目的PublicAPI.Unshipped.txtdotnet build ./src/Controls/src/Core/Controls.Core.csproj /p:PublicApiTypeGeneratePublicAPI 机制由 eng/PublicAPI.targets及 src/PublicAPI.targets驱动各项目下的PublicAPI/或PublicAPI.Shipped.txt、PublicAPI.Unshipped.txt文件即 API 快照例如 src/Essentials/src/PublicAPI/。样例项目仓库内置了可直接运行的样例项目用于演示控件与 API 用法src/Controls/samples/Controls.Sample/覆盖 .NET MAUI 全部控件与功能的完整画廊应用src/Controls/samples/Controls.Sample.Sandbox/空项目适合复现问题或验证用例src/Essentials/samples/Samples/演示设备能力 API原 Essentials即所有非 UI 类 MAUI APIsrc/BlazorWebView/samples/Blazor Hybrid 示例WinForms / WPF 等。参与贡献. .NET MAUI 是开源项目官方鼓励通过以下方式参与试用并反馈运行应用、报告问题Issues提交代码提出 Pull Request改进或新增功能参与设计讨论在 .NET MAUI issues 中参与设计讨论。相关规范文件见仓库.github目录CONTRIBUTING.md、CODE_OF_CONDUCT.md、DEVELOPMENT.md以及 docs/ 下的设计文档如 docs/design/HandlerResolution.md、docs/design/Scoping.md 等。常见问题与资讯渠道FAQ遇到问题可先查阅官方 Wiki 的完整 FAQ 列表版本动态仓库根 README 记录了近年重要版本更新例如 .NET 10 的 .NET MAUI 新特性、.NET 9 的新特性说明以及 Syncfusion 开源贡献加入 .NET MAUI 生态的公告2024 年 10 月博客官方 .NET MAUI Blog 持续发布特性详解与社区案例。结语通过本文你已经了解了 .NET MAUI 的核心定位——一个让开发者以 C# 和 XAML 在单一代码库中构建 Android、iOS、iPadOS、macOS 与 Windows 原生应用的跨平台框架。从dotnet new maui一行命令创建项目到读懂模板生成的 Single Project csproj、MauiProgram 启动管线再到理解mauiworkload 的分层依赖你已具备快速上手实践与进一步深读源码的基础。更深入的内容控件行为、Handler 解析机制、依赖注入作用域等可继续研读本仓库 docs/ 目录下的设计文档与对应源码。【免费下载链接】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),仅供参考