You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

原生Xamarin项目迁移咨询:含Xamarin.Forms代码应转至哪个.NET平台?

Xamarin项目迁移方案指导

平台选择判断

先明确项目核心依赖,再决定迁移方向:

  • 如果仅零散使用Xamarin.Forms,核心是原生Xamarin.iOS/Xamarin.Android代码:优先迁移到.NET for Android/.NET for iOS(.NET 6+原生平台),迁移成本更低,API兼容性高。
  • 如果大量依赖Xamarin.Forms做UI开发:必须迁移到MAUI,因为Xamarin.Forms已停止维护,MAUI是官方继任者,只有它能获得长期支持。

方案一:迁移到.NET for Android/.NET for iOS(原生平台)

步骤1:升级共享类项目

打开共享类项目的.csproj文件,修改目标框架为.NET 6+(推荐LTS版本):

<TargetFramework>net6.0</TargetFramework>

移除旧的Xamarin相关NuGet包,替换Xamarin.Forms零散引用:

  • 若使用MessagingCenter,替换为CommunityToolkit.Mvvm的IMessenger;
  • 若使用Forms工具类,直接重构为原生平台等价实现;
  • 保留业务逻辑、ViewModel等非UI代码。

步骤2:创建新的原生平台项目

在Visual Studio中创建:

  • Android端:选择「Android App (.NET)」模板
  • iOS端:选择「iOS App (.NET)」模板

步骤3:迁移平台专属代码

  • iOS端:
    复制原Xamarin.iOS代码文件到新项目,替换NuGet引用:移除Xamarin.iOS、Xamarin.Forms.iOS,添加Microsoft.iOS。大部分UIKit、Foundation等命名空间API完全兼容,直接使用即可。
  • Android端:
    复制原Xamarin.Android代码文件到新项目,替换NuGet引用:移除Xamarin.Android、Xamarin.Forms.Android,添加Microsoft.Android。Android.App、Android.Widget等命名空间API基本无变化。

步骤4:处理依赖与错误

  • 第三方NuGet包需替换为支持.NET 6+的版本;
  • 遇到Xamarin.Forms相关编译错误:要么替换为原生UI实现(比如用UIViewController替代ContentPage,用UIStackView替代StackLayout),要么删除无用的Forms引用。

方案二:迁移到MAUI(适合大量Xamarin.Forms场景)

步骤1:预处理原项目

先将原Xamarin.Forms项目升级到最新稳定版(Xamarin.Forms 5.x),确保项目能正常编译运行,修复现有bug。

步骤2:创建MAUI项目

在Visual Studio中选择「.NET MAUI App」模板创建新项目。

步骤3:迁移共享与Forms代码

  • 复制原共享类项目的业务逻辑、ViewModel到MAUI项目的共享代码区,或升级原共享类到.NET 6+后作为类库引用;
  • 复制Xamarin.Forms的XAML页面、代码-behind到MAUI项目的Pages文件夹,修改XAML命名空间:
    <!-- 替换原Forms命名空间 -->
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    
  • 调整App类继承:从Xamarin.Forms.Application改为Microsoft.Maui.Controls.Application;在MauiProgram.cs中配置MainPage。

步骤4:迁移平台专属代码

  • 原Xamarin自定义渲染器替换为MAUI的Handlers;
  • 平台特定初始化代码(如权限、第三方SDK配置)迁移到MAUI的Platforms/Android、Platforms/iOS对应文件中(如MainActivity.cs、AppDelegate.cs)。

步骤5:更新依赖与调试

  • 移除所有Xamarin相关NuGet包,替换为Microsoft.Maui.Controls、Microsoft.Maui.Essentials等MAUI官方包;
  • 第三方包需替换为支持MAUI的版本;
  • 编译调试,处理过时API替换、平台配置调整等问题(如Android权限申请、iOS Info.plist配置)。

关于复制代码到.NET for iOS出错的解决

.NET for iOS是纯原生平台项目,不支持Xamarin.Forms的UI组件,因此代码中若包含ContentPage、StackLayout等Forms类会直接报错。解决方式:

  • 若只是少量Forms引用:直接替换为iOS原生UIKit实现;
  • 若大量依赖Forms:放弃.NET for iOS原生方案,转用MAUI迁移。

内容的提问来源于stack exchange,提问作者Eric Bowerbank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 03:13:19