.NET MAUI多目标框架下PackageVersion值不一致致NuGet还原失败
解决.NET MAUI项目多目标框架下PackageVersion冲突问题
核心原因
.NET MAUI项目默认会为不同目标框架(如Android、iOS、net8.0)处理版本继承逻辑,但手动添加额外目标框架后,版本属性的继承可能出现冲突——原项目的Version属性可能被部分目标框架的默认配置覆盖,导致PackageVersion同时获取到默认的1.0.0和你设置的自定义版本(如2.0),触发NuGet的版本一致性校验报错。
更合理的修复方案
1. 全局统一版本属性定义
在csproj文件的全局<PropertyGroup>(所有目标框架共享的属性组)中明确设置Version,让所有目标框架自动继承同一版本值,从根源避免冲突:
<PropertyGroup> <!-- 全局统一版本,PackageVersion会自动继承该值 --> <Version>2.0.0</Version> <!-- 若需AssemblyVersion/FileVersion与Version不同,再单独配置(可选) --> <!-- <AssemblyVersion>2.0.0.0</AssemblyVersion> --> <!-- <FileVersion>2.0.0.0</FileVersion> --> </PropertyGroup>
2. 移除冲突的目标框架专属版本配置
检查csproj文件,删除所有针对单个目标框架的PackageVersion或Version设置,比如这类会引发冲突的代码:
<!-- 此类针对特定目标框架的版本配置需删除 --> <PropertyGroup Condition="$(TargetFramework) == 'net8.0'"> <PackageVersion>1.0.0</PackageVersion> </PropertyGroup>
确保所有版本相关属性都定义在全局属性组内,而非特定目标框架的专属属性组中。
3. 清理NuGet缓存并重新还原
如果修改配置后仍报错,执行以下命令清理缓存并重新还原依赖:
dotnet nuget locals all --clear dotnet restore
是否属于框架bug?
这并非框架bug,而是多目标框架配置时的版本属性继承逻辑冲突。.NET MAUI默认模板针对移动平台做了版本配置优化,手动添加桌面目标框架(如net8.0)后,需要确保全局版本属性的统一性,避免不同目标框架的默认配置覆盖自定义版本。
内容的提问来源于stack exchange,提问作者David Maw
相关产品推荐
相关产品推荐

