从Xamarin升级到MAUI时遭遇NuGet还原循环错误求助
解决Xamarin升级MAUI时NuGet依赖冲突问题
问题背景
核心API从netstandard2.0升级到.NET8后,遭遇NuGet包版本冲突:Xamarin.Android.Support.Compat存在版本不一致问题,同时CardsView、Plugin.Permissions、Rg.Plugins.Popup等旧第三方插件依赖过时的Xamarin.Forms及支持库版本,导致包恢复失败。
错误日志
添加包时的报错:
Restoring packages for C:\Developer\*\*\*\*.csproj... GET https://api.nuget.org/v3-flatcontainer/xamarin.forms/index.json OK https://api.nuget.org/v3-flatcontainer/xamarin.forms/index.json 205ms CACHE https://api.nuget.org/v3-vulnerabilities/index.json CACHE https://api.nuget.org/v3-vulnerabilities/2024.10.10.23.29.13/vulnerability.base.json CACHE https://api.nuget.org/v3-vulnerabilities/2024.10.10.23.29.13/2024.10.11.11.29.14/vulnerability.update.json NU1603: CardsView 2.4.8 depends on Xamarin.Forms (>= 3.0.0) but Xamarin.Forms 3.0.0 was not found. An approximate best match of Xamarin.Forms 3.0.0.446417 was resolved. NU1107: Version conflict detected for Xamarin.Android.Support.Compat. Install/reference Xamarin.Android.Support.Compat 28.0.0.1 directly to project VanMonster.AppraisalCore to resolve this issue. *.* -> Plugin.Permissions 5.0.0-beta -> Xamarin.Android.Support.Compat (>= 28.0.0.1) *.*-> CardsView 2.4.8 -> Xamarin.Forms 3.0.0.446417 -> Xamarin.Android.Support.v4 25.4.0.2 -> Xamarin.Android.Support.Compat (= 25.4.0.2). Package restore failed. Rolling back package changes for '*.*'.
删除包时的报错:
Restoring packages for C:\Developer\*\*\*\*.csproj... CACHE https://api.nuget.org/v3/vulnerabilities/index.json CACHE https://api.nuget.org/v3-vulnerabilities/2024.10.10.23.29.13/vulnerability.base.json CACHE https://api.nuget.org/v3-vulnerabilities/2024.10.10.23.29.13/2024.10.11.11.29.14/vulnerability.update.json NU1107: Version conflict detected for Xamarin.Android.Support.Compat. Install/reference Xamarin.Android.Support.Compat 28.0.0.1 directly to project VanMonster.AppraisalCore to resolve this issue. VanMonster.AppraisalCore -> Plugin.Permissions 5.0.0-beta -> Xamarin.Android.Support.Compat (>= 28.0.0.1) VanMonster.AppraisalCore -> Rg.Plugins.Popup 1.2.0.223 -> Xamarin.Forms 2.5.0.121934 -> Xamarin.Android.Support.v4 25.4.0.2 -> Xamarin.Android.Support.Compat (= 25.4.0.2). Generating MSBuild file C:\Developer\*\*\*\*.csproj.nuget.g.props. Generating MSBuild file C:\Developer\*\*\*\obj\*.csproj.nuget.g.targets. Writing assets file to disk. Path: C:\Developer\*\*\*\obj\project.assets.json Executing nuget actions took 113 ms Time Elapsed: 00:00:00.5898366 ========== Finished ========== Failed to restore C:\*\*\*\*.csproj (in 2.77 sec). NuGet package restore failed. Please see Error List window for detailed warnings and errors. Time Elapsed: 00:00:02.7920800
解决方案
1. 清理过时Xamarin依赖
移除所有与Xamarin相关的包,包括旧第三方插件:
dotnet remove package Xamarin.Forms dotnet remove package CardsView dotnet remove package Rg.Plugins.Popup dotnet remove package Plugin.Permissions dotnet remove package Xamarin.Android.Support.Compat # 移除其他Xamarin.Android.Support开头的包
2. 升级核心API并替换为MAUI兼容包
- 确认项目文件(.csproj)的目标框架已更新:
<TargetFramework>net8.0</TargetFramework> - 添加替代包:
- Newtonsoft.Json:直接安装最新稳定版
- 权限管理:替换
Plugin.Permissions为MAUI原生权限API,安装Microsoft.Maui.ApplicationModel.Permissions - 弹窗组件:替换
Rg.Plugins.Popup为.NET MAUI Community Toolkit的Popup,安装CommunityToolkit.Maui - 卡片视图:替换旧CardsView为MAUI原生自定义控件或现代第三方组件(旧版本CardsView无法兼容.NET8)
3. 强制统一依赖版本(临时方案)
若必须保留旧插件,手动在.csproj中指定统一的支持库版本:
<PackageReference Include="Xamarin.Android.Support.Compat" Version="28.0.0.1" /> <PackageReference Include="Xamarin.Android.Support.Core.Utils" Version="28.0.0.1" /> <PackageReference Include="Xamarin.Android.Support.v4" Version="28.0.0.1" /> <!-- 所有相关支持包需指定相同版本 -->
注:此方案仅作临时修复,长期会引发更多兼容性问题,推荐彻底替换为MAUI兼容组件。
4. 验证修复
- 清理项目并恢复包:
dotnet clean dotnet restore - 修复代码引用:将
Xamarin.Forms相关命名空间替换为Microsoft.Maui,权限请求改为MAUI的Permissions.RequestAsync<PermissionType>()方式
内容的提问来源于stack exchange,提问作者bancqm
相关产品推荐
相关产品推荐

