Xamarin.Android发布模式下MvxRecyclerView类找不到错误
解决MvvmCross 5.6.3发布模式下MvxRecyclerView找不到的问题
我之前在升级MvvmCross版本后也碰到过一模一样的链接器问题——调试模式一切正常,但发布模式(链接所有程序集)就报找不到MvxRecyclerView的错误,给你几个经过验证的解决方案:
1. 确保LinkerPleaseInclude.cs显式引用MvxRecyclerView
即使你的LinkerPleaseInclude.cs是最新版本,也可能没覆盖到MvxRecyclerView相关的引用。手动添加以下代码到该文件中,强制链接器保留这个类:
public void Include(MvxRecyclerView recyclerView) { // 调用MvxRecyclerView的关键方法和相关类,避免被链接器移除 var adapter = new MvxRecyclerViewAdapter(recyclerView.Context); recyclerView.SetAdapter(adapter); recyclerView.ScrollToPosition(0); recyclerView.HasFixedSize = true; } // 同时添加对适配器的引用,确保相关代码也被保留 public void Include(MvxRecyclerViewAdapter adapter) { adapter.NotifyDataSetChanged(); }
链接器会认为这些代码被实际使用,从而不会删除MvxRecyclerView和MvxRecyclerViewAdapter相关的类。
2. 在链接器设置中排除MvvmCross RecyclerView相关程序集
如果上面的方法无效,可以直接告诉链接器不要处理MvvmCross的RecyclerView包:
- 右键你的Android项目 → 属性 → Android选项 → 链接器
- 在“忽略的程序集”列表中添加
MvxRecyclerView对应的包名(通常是MvvmCross.Droid.Support.V7.RecyclerView,根据你实际引用的包调整) - 这个方法简单直接,能确保整个包的代码都不会被链接器移除。
3. 使用自定义链接器XML配置文件
想要更精细地控制保留的类,而不是排除整个程序集,可以创建链接器配置文件:
- 在Android项目中新建一个名为
Linker.xml的文件 - 设置该文件的生成操作为
AndroidResource - 添加以下内容:
<linker> <assembly fullname="MvvmCross.Droid.Support.V7.RecyclerView"> <type fullname="Android.Views.MvxRecyclerView" preserve="all"/> <type fullname="MvvmCross.Droid.Support.V7.RecyclerView.MvxRecyclerViewAdapter" preserve="all"/> <type fullname="MvvmCross.Droid.Support.V7.RecyclerView.MvxRecyclerViewHolder" preserve="all"/> </assembly> </linker>
这个配置会强制保留MvxRecyclerView及其核心相关类,同时不会保留包中其他未使用的代码,兼顾包大小和功能完整性。
4. 验证NuGet包版本一致性
最后检查一下,你的项目中所有MvvmCross相关的NuGet包(包括RecyclerView的包)版本是否都是5.6.3。版本不匹配可能导致链接器在处理时找不到正确的类定义,确保所有MvvmCross包版本统一即可。
内容的提问来源于stack exchange,提问作者Hubi
相关产品推荐
相关产品推荐

