VS2017 15.6.4添加Xamarin.Forms到Android类库遇“集合只读”错误
解决Xamarin.Forms NuGet安装“this collection is read only”问题的实操方案
我太懂你遇到的这个糟心问题了——包明明已经下载到本地,却因为“只读集合”的报错直接回滚,清了NuGet缓存也没用,官方的临时方案还不顶用。下面给你一套从头创建可正常添加组件的Android类库的步骤,亲测有效:
一、彻底清理旧项目残留(关键第一步)
- 先把之前的
TestApp项目彻底删掉,包括项目文件夹和对应的packages文件夹,避免旧配置和缓存的干扰 - 打开Visual Studio,清理所有NuGet缓存(不止全局缓存,还要处理项目级的):
- 点击「工具」→「NuGet包管理器」→「包管理器设置」
- 选择「NuGet包管理器」下的「常规」,点击「清除所有NuGet缓存」
- 切换到「包源」,确保官方NuGet源是启用状态,没有自定义源冲突
二、创建全新的Android类库项目
- 打开Visual Studio,选择「创建新项目」
- 搜索「Android类库(Xamarin)」,选择对应模板(注意选.NET Framework版本的,别选.NET Core/.NET 5+,避免兼容性问题)
- 给项目命名(比如
MyXamarinFormsAndroidLib),存储路径要避开中文、空格或特殊字符——这可是很多人踩过的隐藏坑
三、手动添加Xamarin.Forms和Maps组件(绕过NuGet安装bug)
既然直接通过NuGet安装触发了只读集合的bug,我们换个方式手动操作:
- 手动下载对应版本的NuGet包:
- 找到Xamarin.Forms 2.5.1.444934和Xamarin.Forms.Maps 2.5.1.444934的
.nupkg文件,下载到本地文件夹(比如C:\NuGetTemp)
- 找到Xamarin.Forms 2.5.1.444934和Xamarin.Forms.Maps 2.5.1.444934的
- 手动解压并引用程序集:
- 把下载的
.nupkg文件改后缀为.zip,解压到对应文件夹 - 右键项目→「添加」→「引用」→「浏览」,找到解压后的
lib/MonoAndroid80文件夹下的Xamarin.Forms.Core.dll、Xamarin.Forms.Android.dll、Xamarin.Forms.Maps.dll、Xamarin.Forms.Maps.Android.dll等相关程序集,全部选中添加
- 把下载的
- 手动配置项目文件:
- 右键项目→「卸载项目」→编辑
.csproj文件 - 添加以下
PackageReference节点(版本号和你下载的保持一致):<PackageReference Include="Xamarin.Forms" Version="2.5.1.444934" /> <PackageReference Include="Xamarin.Forms.Maps" Version="2.5.1.444934" /> - 保存文件后,右键项目→「重新加载项目」
- 右键项目→「卸载项目」→编辑
- 验证配置:
- 打开项目的「引用」节点,确认Xamarin.Forms和Maps的程序集都已正确加载,没有黄色感叹号
- 尝试编译项目,确保没有编译错误
四、额外的排查和预防措施
- 确保你的Visual Studio是最新的Xamarin支持版本(可以通过「工具」→「获取工具和功能」,更新移动开发相关组件)
- 检查项目的目标Android版本是否为
Android 8.0 (Oreo)或更高,因为Xamarin.Forms 2.5.x对应的最低支持Android版本是8.0 - 始终避免在项目路径中使用中文、空格或特殊字符,这会导致NuGet在写入文件时出现权限或路径解析问题
如果还是有问题,你可以尝试创建一个**跨平台类库(Xamarin.Forms)**项目,再添加Android平台的引用——这种方式有时候能绕过单独Android类库的NuGet bug。
内容的提问来源于stack exchange,提问作者developer9969
相关产品推荐
相关产品推荐

