升级至Visual Studio 17.5.3后Xamarin Forms iOS打包失败求助
近期升级Visual Studio至17.5.3版本后,执行Xamarin Forms iOS归档操作时出现以下报错:
包'Microsoft.Bcl 1.1.6'使用'.NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7, .NETFramework,Version=v4.7.1, .NETFramework,Version=v4.7.2, .NETFramework,Version=v4.8'而非项目目标框架'.NETStandard,Version=v2.1'进行还原。此包可能与您的项目不完全兼容。
该问题仅在17.5.3版本中出现,此前版本无异常,以下是可行的解决建议:
更新Microsoft.Bcl包至兼容版本
旧版Microsoft.Bcl 1.1.6对.NET Standard 2.1的支持不完善,直接在NuGet包管理器中找到Microsoft.Bcl,将其更新到支持.NET Standard 2.1的最新稳定版本(如2.0.0及以上版本),更新后重新尝试归档操作。在项目文件中强制指定包的目标框架
若暂时无法更新包,可手动编辑项目的.csproj文件,为Microsoft.Bcl添加目标框架约束,确保它针对.NET Standard 2.1还原:<PackageReference Include="Microsoft.Bcl" Version="1.1.6"> <TargetFrameworks>netstandard2.1</TargetFrameworks> </PackageReference>保存文件后重新还原NuGet包。
清理并重新还原NuGet依赖
- 执行“生成 -> 清理解决方案”清理现有编译文件;
- 删除项目目录下的
obj、bin文件夹以及解决方案根目录的packages文件夹; - 右键解决方案选择“还原NuGet包”,待依赖还原完成后重新尝试归档。
排查间接依赖的引用来源
可能是其他依赖包间接引入了旧版Microsoft.Bcl,通过NuGet包管理器的“依赖项”视图,查看哪个第三方包依赖了Microsoft.Bcl 1.1.6,尝试将该第三方包更新至最新版本,或通过PackageReference的ExcludeAssets属性排除旧版Microsoft.Bcl的引用。临时回退Visual Studio版本
若上述方法均无法解决问题,且项目需紧急完成归档,可暂时回退到之前能正常工作的Visual Studio版本(如17.5.2),同时关注微软官方的更新补丁,等待兼容性问题修复。
内容的提问来源于stack exchange,提问作者Naga Mallesh Maddali

