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

自定义控件导致MAUI应用仅在Release模式下崩溃

注:在撰写此问题并调查以提供更多细节时,我已找到解决方案。保留此问题以节省他人的时间。

MAUI Release模式下自定义控件绑定崩溃问题

问题现象

在MAUI项目中使用自定义SwitchableView控件时,Debug模式运行完全正常,但切换到Release模式后,应用加载屏结束后立即崩溃。注释掉控件的UseMainView绑定后,Release模式下应用可正常启动。但将该控件单独隔离到其他项目时,Debug和Release模式均能正常运行。

代码场景

自定义控件使用代码

<utils:SwitchableView UseMainView="{Binding MyParameter}">
    <!-- 控件内部包含两个视图,根据UseMainView的值切换显示 -->
</utils:SwitchableView>

ViewModel中参数定义

public static bool MyParameter 
{
    get
    {
        return true;
    }
}

问题原因及解决方案

原因

Release模式下MAUI默认启用的链接器优化,会判定静态属性MyParameter没有被直接引用,从而将其从编译后的程序中裁剪掉,导致绑定过程中找不到该属性,引发崩溃。而Debug模式下链接器优化未启用,所以不会出现这个问题;单独隔离项目时,链接器的裁剪规则不同,因此也不会触发该问题。

解决方法(任选其一)

  1. 改为实例属性:将静态属性改为实例属性,确保ViewModel已正确设置为页面的BindingContext:
public bool MyParameter 
{
    get
    {
        return true;
    }
}
  1. 标记保留特性:使用[Preserve]特性标记该静态属性,阻止链接器将其裁剪:
[Preserve]
public static bool MyParameter 
{
    get
    {
        return true;
    }
}
  1. 配置链接器规则:在项目的LinkerConfig.xml中添加规则,保留该ViewModel所在的类或程序集:
<linker>
  <assembly fullname="你的ViewModel程序集名称">
    <type fullname="你的ViewModel命名空间.目标ViewModel类名" preserve="all" />
  </assembly>
</linker>

内容的提问来源于stack exchange,提问作者GChapX

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 15:00:06