You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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配置文件

想要更精细地控制保留的类,而不是排除整个程序集,可以创建链接器配置文件:

  1. 在Android项目中新建一个名为Linker.xml的文件
  2. 设置该文件的生成操作为AndroidResource
  3. 添加以下内容:
<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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:12:33