.NET 8 MAUI自定义组件仅在iOS Release模式崩溃求助
iOS Release模式下MAUI应用因
ScheduleItem.get_Address引发InvalidProgramException的解决方案 检查AOT编译配置
iOS Release默认开启AOT编译,这类IL异常常和AOT优化有关。可以尝试在项目的.csproj文件中添加AOT排除规则:<PropertyGroup> <MtouchExtraArgs>--aot-exclude=ScheduleItem::get_Address</MtouchExtraArgs> </PropertyGroup>若无效,可临时禁用AOT优化排查(注意会影响性能,问题解决后再调整):
<PropertyGroup> <MtouchOptimize>None</MtouchOptimize> </PropertyGroup>简化
Address属性的getter逻辑
确保ScheduleItem的Address属性getter没有复杂动态逻辑,比如匿名方法、动态类型等。可以改为直接返回预初始化的字段:private readonly Address _address = new Address(); public Address Address => _address;避免getter中出现分支返回null或未初始化对象的情况。
调整XAML编译选项
MAUI Release的XAML编译优化可能导致绑定生成的IL异常。尝试在ScheduleItemView的XAML头部禁用该视图的XAML编译:<ContentView xmlns="http://schemas.microsoft.com/dotnet/2021/maui" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="YourNamespace.ScheduleItemView" x:CompileOptions="Skip">若问题解决,再逐步排查XAML中绑定
Address的具体部分,比如嵌套绑定、转换器是否存在兼容问题。彻底清理重建项目
删除项目的bin、obj文件夹,清除iOS模拟器缓存,再重新生成Release版本。旧编译缓存可能导致AOT编译异常。排查第三方库或自定义特性
若ScheduleItem或Address使用了第三方特性(如序列化标记)、自定义访问器拦截逻辑,可能在AOT编译时不兼容。尝试移除这类特性,替换为MAUI兼容的实现。
内容的提问来源于stack exchange,提问作者Jonas Van mullem
相关产品推荐
相关产品推荐

