Xamarin共享项目更新后触发资源未找到异常求助
这种资源ID找不到的问题在Xamarin共享项目更新后挺常见的,先把你遇到的异常信息贴出来方便对照:
Android.Content.Res.Resources+NotFoundException: Resource ID #0x7f030046(十进制:2130903110)
at android.content.res.Resources$NotFoundException: Resource ID #0x7f030046
at android.content.res.Resources.getValue(Resources.java:2558)
at android.content.res.Resources.loadXmlResourceParser(Resources.java:4360)
at android.content.re...
下面是几个针对性的解决步骤,按顺序尝试:
清理重建+删除缓存文件
这是最常用的第一步:先在Visual Studio里点击Build → Clean Solution,等待清理完成后再点击Build → Rebuild Solution。如果还是不行,手动删除Android项目和共享项目下的bin、obj文件夹,这些文件夹里的旧资源缓存很可能是导致ID映射混乱的元凶,删除后重新生成就能刷新资源ID。检查共享项目的资源完整性
确认ID#0x7f030046对应的资源(比如布局、图片、字符串等)是否真的存在于共享项目中:- 可以打开共享项目的
Resources文件夹,逐个检查子目录(layout、drawable、values等),看看有没有不小心删除的文件; - 注意Android资源文件名是大小写敏感的,比如
MyImage.png和myimage.png会被识别成两个不同的资源; - 还要确认资源的
Build Action是否正确:右键资源文件 → 属性,确保布局文件设为AndroidResource,字符串资源同样设为AndroidResource,不要选成Content或者其他类型。
- 可以打开共享项目的
修正资源引用方式
如果是在代码里引用资源,绝对不要用硬编码的ID(比如直接写2130903110),一定要用强类型的引用,比如Resource.Layout.MyPage、Resource.Drawable.AppIcon,这种方式会自动关联最新生成的资源ID,避免更新后ID失效。如果是在布局文件里引用,检查有没有拼写错误,比如@drawable/my_icon是不是写错了文件名。重新生成Resource.Designer.cs文件
Android项目的Resource.Designer.cs是自动生成的资源ID映射文件,更新共享项目后可能出现文件未同步的情况:- 先备份这个文件(以防万一),然后直接删除它;
- 重新生成解决方案,系统会自动根据当前的资源重新生成正确的
Resource.Designer.cs,里面会包含最新的资源ID映射。
检查版本兼容性
确认更新后的共享项目和你的Android项目使用的Xamarin.Android版本是否一致:打开NuGet包管理器,分别查看共享项目和Android项目的Xamarin.Android包版本,如果版本差异较大,可能会导致资源生成逻辑不兼容,把两个项目的版本统一成同一个稳定版再试试。
内容的提问来源于stack exchange,提问作者Bz Burr

