升级Xamarin.Forms至3.0.0.446417后遇MSB4062编译错误求助
针对你遇到的这个升级后编译报错的问题,我之前帮不少开发者排查过类似情况,给你几个针对性的解决思路:
检查项目的.NET Standard目标版本
确保你的共享项目(或.NET Standard类库)的目标框架是netstandard2.0,而不是更低版本。右键项目→属性→应用→目标框架,确认设置正确。毕竟Xamarin.Forms 3.0开始对netstandard2.0有硬性依赖,旧版本框架根本适配不了。手动同步Xamarin.Forms.Build.Tasks包版本
有时候NuGet升级主包时,配套的Build.Tasks包可能没同步更新。你可以在NuGet包管理器里搜索Xamarin.Forms.Build.Tasks,直接安装或升级到和主包一致的版本(3.0.0.446417)——这个包负责处理XamlG这类编译任务,版本不匹配肯定会导致加载失败。修正项目文件中的Targets引用
如果上面的方法没用,你可以手动调整项目.csproj文件里的Targets引用。打开文件后找到类似这样的节点:<Import Project="..\packages\Xamarin.Forms.3.0.0.446417\build\Xamarin.Forms.targets" Condition="Exists('..\packages\Xamarin.Forms.3.0.0.446417\build\Xamarin.Forms.targets')" />先确认路径是否正确,要是有重复的Import节点就删掉旧的;如果是使用PackageReference管理的项目,确保没有残留的packages.config引用干扰。
更新Visual Studio及配套工具
Xamarin.Forms 3.0需要对应版本的Visual Studio支持,比如Visual Studio 2017 15.7及以上版本。同时别忘了更新你的Xamarin组件、Android SDK、iOS工具链,旧版本工具大概率没法兼容netstandard2.0的程序集加载逻辑。彻底重置NuGet引用
尝试完全卸载所有Xamarin相关的NuGet包(包括Xamarin.Forms、Xamarin.Forms.Maps、Xamarin.Forms.Build.Tasks),清理解决方案,手动删除所有项目的obj和bin文件夹,之后再重新安装对应版本的包。安装时记得选“安装到所有项目”,保证共享项目和平台项目的包版本完全一致。
要是还是不行,你可以打开详细编译日志,看看有没有更具体的依赖缺失提示,比如某个特定的dll找不到,这样能更精准定位问题。
内容的提问来源于stack exchange,提问作者VahidShir

