将Xamarin Forms应用升级至MAUI时的构建问题及排查记录
迁移Xamarin Forms到.NET 6 MAUI的构建问题及解决进展
背景
使用升级助手将包含Android和iOS项目的Xamarin Forms应用迁移至基于.NET 6的MAUI,仅升级解决方案(未升级Android、iOS项目),删除bin和obj文件夹并清理重建后,出现一系列构建错误。
初始构建错误
- Error : XamlC error XFC0000 : 无法解析类型 "ContentPage"。
- Error : XamlC error XFC0000 : 无法解析类型 "Frame"。
- Error : XamlC error XFC0000 : 无法解析类型 "Application"。
- 项目目标框架为
net6.0-android;net6.0-ios,无法被目标框架为MonoAndroid,Version=v13.0的项目引用。 - 项目目标框架为
net6.0-android;net6.0-ios,无法被目标框架为Xamarin.iOS,Version=v1.0的项目引用。 - 项目与monoandroid13.0不兼容,项目支持的框架:
net6.0-android31.0 (.NETCoreApp,Version=v6.0)
net6.0-ios16.1 (.NETCoreApp,Version=v6.0) - 项目与xamarinios10不兼容,项目支持的框架:
net6.0-android31.0 (.NETCoreApp,Version=v6.0)
net6.0-ios16.1 (.NETCoreApp,Version=v6.0) - Xamarin.AndroidX.Browser版本冲突:需直接在项目中安装/引用Xamarin.AndroidX.Browser 1.4.0.1解决。依赖链:
Microsoft.Maui.Dependencies 6.0.553 -> Xamarin.AndroidX.Browser (>= 1.4.0.1)
Xam.Plugin.HtmlLabel 5.1.0 -> Xamarin.Essentials 1.7.0 -> Xamarin.AndroidX.Browser (>= 1.3.0.5 && < 1.4.0) - 错误:使用Windows Forms或WPF,或引用相关项目/包时,必须将目标平台设置为Windows(通常在TargetFramework属性中包含'-windows')。
尝试的修复措施
- 1-3号错误:参考GitHub方案,在Solution.csproj中添加以下代码片段,但无效:
<Target Name="_ValidateMauiDoesNotHaveXamarinForms" BeforeTargets="_CheckForInvalidConfigurationAndPlatform" Condition="'$(MauiDisableXamarinFormsValidation)' != 'True'"> <Error Code="MA001" Text="This project or a dependency has imported the Xamarin.Forms packages. .NET MAUI is not compatible with Xamarin.Forms and is unable to build. Please remove Xamarin.Forms or the project/package dependency that is using Xamarin.Forms." Condition="'$(_XFTargetsImported)' == 'true'"/> </Target>
- 4-7号错误:找到相关参考链接,但未找到明确解决方法。
- 8号错误:尝试给Android项目安装Xamarin.AndroidX.Browser 1.4.0.1失败,只能安装1.3.0.6版本,提示“Package restore failed. Rolling back package changes for 'MyProject.Android'.”
- 9号错误:项目无Windows平台却出现该错误,当前Solution.csproj配置:
<PropertyGroup> <TargetFrameworks>net6.0-android;net6.0-ios</TargetFrameworks> <UseMaui>True</UseMaui> <OutputType>Library</OutputType> <ImplicitUsings>enable</ImplicitUsings> <SingleProject>true</SingleProject> </PropertyGroup>
修复进展(更新)
为解决“doesn't have a target for 'net6.0-ios/ios-arm64'”问题,在iOS项目.csproj中添加:
<PropertyGroup Condition="$(TargetFramework.Contains('-ios'))"> <RuntimeIdentifier>ios-arm64</RuntimeIdentifier> </PropertyGroup>
完成以下操作后解决部分问题:
- 在Android项目.csproj的主PropertyGroup中添加
<SingleProject>true</SingleProject>,关闭VS并删除Bin、Obj、.vs文件夹,解决Android物理设备可用性问题; - 将Android平台Resource文件夹下所有文件的生成操作设为AndroidResource,iOS平台设为BundleResource;
- 将Xaml文件的生成操作从Embedded Resource改为MauiXaml,解决类型无法解析错误。
剩余构建问题
- Error NETSDK1136 使用Windows Forms或WPF,或引用相关项目/包时,必须将目标平台设置为Windows(通常在TargetFramework属性中包含'-windows')。MyProject.iOS C:\Program Files\dotnet\sdk\7.0.306\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.DefaultItems.Shared.targets 250
- Error NU1107 Xamarin.AndroidX.Browser版本冲突:需直接在MyProject项目中安装/引用Xamarin.AndroidX.Browser 1.4.0.1解决。依赖链:MyProject -> Microsoft.Maui.Dependencies 6.0.553 -> Xamarin.AndroidX.Browser (>= 1.4.0.1);MyProject -> Xam.Plugin.HtmlLabel 5.1.0 -> Xamarin.Essentials 1.7.0 -> Xamarin.AndroidX.Browser (>= 1.3.0.5 && < 1.4.0)
- Error NU1202 包GMImagePicker.Xamarin 2.5.1与net6.0-ios16.1 (.NETCoreApp,Version=v6.0)不兼容,该包仅支持xamarinios10 (Xamarin.iOS,Version=v1.0)
- Error APT2144 文件路径无效:
E:\My Projects\Xamarin\MyProject-MyProject-app\MyProject\MyProject.Android\obj\Debug\net6.0-android\res\resources\xml_\file_paths.xml
已解决的版本冲突问题
通过在Android项目和解决方案项目中安装以下NuGet包,解决了Xamarin.AndroidX.Browser版本冲突:
Android项目配置
<PackageReference Include="Xamarin.AndroidX.Browser"> <Version>1.4.0.1</Version> </PackageReference> <PackageReference Include="Xamarin.AndroidX.Lifecycle.LiveData"> <Version>2.4.1.1</Version> </PackageReference> <PackageReference Include="Xamarin.Google.Android.Material"> <Version>1.6.0</Version> </PackageReference> <PackageReference Include="Xamarin.AndroidX.Navigation.UI"> <Version>2.4.2</Version> </PackageReference>
解决方案项目配置
<PackageReference Include="Xamarin.AndroidX.Browser" Version="1.4.0.1" /> <PackageReference Include="Xamarin.AndroidX.Lifecycle.LiveData" Version="2.4.1.1" /> <PackageReference Include="Xamarin.Google.Android.Material" Version="1.6.0" /> <PackageReference Include="Xamarin.AndroidX.Core" Version="1.8.0.1" /> <PackageReference Include="Xamarin.AndroidX.Navigation.UI" Version="2.4.2" />
内容的提问来源于stack exchange,提问作者Matthew Pans
相关产品推荐
相关产品推荐

