MAUI项目从Xamarin迁移怎么做 Xamarin迁移MAUI指南

来源:这里教程网 时间:2026-02-21 17:34:33 作者:

MAUI项目从Xamarin迁移不是“一键替换”,而是有策略的重构过程。核心是复用原有业务逻辑和共享代码,重写UI层与平台特定实现,同时更新构建、依赖和生命周期管理方式。

先评估再动手:识别迁移可行性

打开现有Xamarin.Forms解决方案,重点检查以下几项:

是否大量使用已弃用的Xamarin.Essentials API(如
DeviceDisplay.MainDisplayInfo
)——MAUI中对应为
Microsoft.Maui.Devices.Display.MainDisplayInfo
,命名空间和部分行为有差异
是否依赖第三方Xamarin控件(如Syncfusion、Telerik)——确认其是否已发布MAUI正式版支持,否则需暂留Xamarin或寻找替代方案 是否有深度定制的Renderers或Effects——这些在MAUI中需改写为
Handler
(如
ButtonHandler
)或
MauiAppBuilder
配置
是否使用Xamarin.Forms Shell导航——MAUI的
Shell
保留了类似结构,但路由注册、FlyoutItem写法略有调整

新建MAUI项目,逐步迁移共享代码

不要直接升级.csproj,而是新建一个MAUI项目(.NET 6+ SDK风格),然后按模块导入:

将原Xamarin项目的
Models
ViewModels
Services
Helpers
等纯C#文件夹整体复制到MAUI项目中(无需修改)
App.xaml.cs
中的初始化逻辑(如依赖注入注册、主题设置)迁移到
MauiProgram.CreateMauiApp()
中,用
builder.Services
注册服务
AppShell.xaml
可保留结构,但需更新命名空间:
xmlns:local="clr-namespace:MyApp"
xmlns:local="using:MyApp"
(.NET 5+ using语法)
页面XAML中,把
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
保留,
xmlns:local
xmlns:views
路径需同步更新

UI重写要点:XAML与代码背后的关键变化

大部分XAML可沿用,但以下细节必须调整:

Grid.RowDefinitions
Auto
改为
*
Auto
(MAUI中
Auto
含义更严格,建议优先用
*
100
ListView
已移除,统一用
CollectionView
替代,绑定方式一致,但
ItemTemplate
内需确保
DataTemplate
根元素是
VerticalStackLayout
等容器
Image.Source
不再自动处理嵌入资源,需显式指定
ImageSource.FromResource("MyApp.Images.icon.png", typeof(Startup))
C#后台代码中,
OnAppearing
/
OnDisappearing
仍可用,但推荐用
StateContainer
INotifyPropertyChanged
响应状态变化,减少页面生命周期强耦合

平台项目适配与调试技巧

iOS/Android/macOS项目文件(.csproj)会自动生成,但需手动校验:

Android:确认
AndroidManifest.xml
android:usesCleartextTraffic="true"
(如需HTTP调试)、权限声明是否完整;
MainActivity.cs
继承
MauiAppCompatActivity
,不需再写
LoadApplication
iOS:
AppDelegate.cs
SceneDelegate.cs
大幅简化,主要逻辑在
MauiProgram
;注意Info.plist中
NSCameraUsageDescription
等权限描述字段不能缺失
调试时优先运行Android模拟器或iOS真机(热重载在MAUI中对XAML支持稳定,但首次启动比Xamarin稍慢,耐心等待) 遇到“找不到类型”错误,大概率是命名空间未更新或缺少
using Microsoft.Maui.Controls;
(MAUI中Controls和Handlers分离,页面仍需引用Controls)

基本上就这些。迁移本质是“换壳不换心”——业务逻辑稳住,UI层按MAUI范式重写,边测边调。官方MAUI迁移文档可作为实时查证依据,不复杂但容易忽略细节。

相关推荐