本地从源码编译Xamarin Forms 5.0.*生成NuGet包失败如何解决
Xamarin.Forms 5.0 自定义版本打包报错解决方案
错误根因
你遇到的NullReferenceException报错源于NuGet 5.9.x版本与XF 5.0打包脚本的兼容性问题,以及自定义修改后nuspec模板与实际编译产物不匹配的问题,对应解决方法如下:
1. 降级NuGet CLI到兼容版本
XF 5.0官方构建流程适配的NuGet版本为5.8.x,5.9.x版本存在TFM(目标框架标识)识别空引用bug。你可以在build.cake文件开头添加如下配置,强制构建脚本使用指定版本的NuGet工具:
#tool nuget:?package=NuGet.CommandLine&version=5.8.1
2. 修正删除UWP项目后的打包配置
你移除UWP相关项目后,没有同步修改打包用的nuspec模板,导致打包时会查找不存在的UWP平台编译产物:
- 打开
nuspec/Xamarin.Forms.nuspec模板文件,删除所有UWP相关的<file>节点和<referenceGroup>分组节点 - 执行
.\build.ps1 -Target Clean清理之前的编译缓存
3. 先验证全平台编译成功再打包
不要直接执行打包命令,先单独执行编译任务确认所有保留的平台项目都编译成功:
.\build.ps1 -Target Build
如果有编译失败的项目,优先解决编译问题,确保所有目标平台的DLL都正常生成后再执行打包命令。
4. VS构建Android报错修复
截图中的Android资源编译错误是因为本地Android SDK版本不符合要求:
- 打开Visual Studio Installer,在「单个组件」页签下安装 Android 11.0 (API 30) SDK 和 Android 构建工具 30.0.3
- 右键Xamarin.Forms.Android项目,在属性页将「目标框架版本」设置为Android 11.0 (API 30)
内容的提问来源于stack exchange,提问作者Dmytro Bondarenko
相关产品推荐
相关产品推荐

