.NET MAUI发布版调用Toast.Show()抛出System.InvalidCastException异常
.NET MAUI Release模式下调用Toast.Show()抛出System.InvalidCastException异常
在Release配置下编译.NET MAUI应用后,调用Toast.Show()时会抛出如下System.InvalidCastException异常,Debug配置下无此问题:
System.InvalidCastException: Arg_InvalidCastException at System.Collections.Frozen.SmallFrozenSet`1.GSW[[UIKit.UIView, Microsoft.iOS, Version=17.2.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065]].Store(FrozenSet`1 ) at System.Collections.Frozen.FrozenSetInternalBase`2[[UIKit.UIView, Microsoft.iOS, Version=17.2.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065],[System.Collections.Frozen.SmallFrozenSet`1.GSW[[UIKit.UIView, Microsoft.iOS, Version=17.2.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065]], System.Collections.Immutable, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]]..ctor(IEqualityComparer`1 ) at System.Collections.Frozen.SmallFrozenSet`1[[UIKit.UIView, Microsoft.iOS, Version=17.2.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065]]..ctor(HashSet`1 ) at System.Collections.Frozen.FrozenSet.CreateFromSet[UIView](HashSet`1 ) at System.Collections.Frozen.FrozenSet.ToFrozenSet[UIView](IEnumerable`1 , IEqualityComparer`1 ) at CommunityToolkit.Maui.Core.Views.AlertView.get_Children() at CommunityToolkit.Maui.Core.Views.AlertView.Initialize() at CommunityToolkit.Maui.Core.Views.Alert.Show() at CommunityToolkit.Maui.Alerts.Toast.ShowPlatform(CancellationToken token) at CommunityToolkit.Maui.Alerts.Toast.Show(CancellationToken token) at KinesiaOne.ViewModels.SettingsPageViewModel.VersionTapped()
复现步骤
- 克隆包含复现代码的仓库
- 设置拥有分发证书的Bundle ID
- 以Release模式构建并部署到设备
- 点击“Click me”按钮,即可触发异常,Toast无法显示
解决方案
方案1:添加AOT编译排除规则
在iOS项目的.csproj文件中,针对Release配置添加AOT排除参数,避免System.Collections.Frozen相关类型被错误优化:
<PropertyGroup Condition="'$(Configuration)' == 'Release'"> <MtouchExtraArgs>--aot-exclude=System.Collections.Frozen.SmallFrozenSet`1.GSW</MtouchExtraArgs> </PropertyGroup>
方案2:更新CommunityToolkit.Maui版本
该异常属于组件已知问题,更新CommunityToolkit.Maui到最新稳定版本,大概率已修复此AOT编译导致的类型转换问题。
内容的提问来源于stack exchange,提问作者Brandon Minnick
相关产品推荐
相关产品推荐

