Xamarin Forms发布模式下触发System.InvalidProgramException异常求助
Xamarin Forms发布版启动卡启动页,System.InvalidProgramException异常解决
问题场景
构建Xamarin Forms应用发布版本时,部署后卡在启动页,日志抛出以下异常:
[GraphicsEnvironment] Neither updatable production driver nor prerelease driver is supported. [NetworkSecurityConfig] No Network Security Config specified, using platform default [NetworkSecurityConfig] No Network Security Config specified, using platform default [MultiDex] VM with version 2.1.0 has multidex support [MultiDex] Installing application [MultiDex] VM has multidex support, MultiDex support library is disabled. [monodroid-gc] GREF GC Threshold: 46080 [CompatibilityChangeReporter] Compat change id reported: 183155436; UID 10158; state: ENABLED [FirebaseApp] Device unlocked: initializing all Firebase APIs for app [DEFAULT] [FirebaseInitProvider] FirebaseApp initialization successful [mono-rt] [ERROR] FATAL UNHANDLED EXCEPTION: System.InvalidProgramException: Invalid IL code in Android.Runtime.AndroidTypeManager:RegisterNativeMembers (Java.Interop.JniType,System.Type,System.ReadOnlySpan`1<char>): IL_0240: stloc.s 19 [mono-rt] [mono-rt] [mono-rt] at Android.Runtime.JNIEnv.RegisterJniNatives (System.IntPtr typeName_ptr, System.Int32 typeName_len, System.IntPtr jniClass, System.IntPtr methods_ptr, System.Int32 methods_len) [0x00088] in <7685f94735ec4635bcf7c23732e3db0f>:0
使用环境:Xamarin Forms 5.0.0.2545,Visual Studio for Mac 17.4.1
可行解决步骤
- 禁用AOT编译:打开Android项目的发布配置,找到“AOT编译”选项并取消勾选。这类Invalid IL代码异常大多和AOT编译的代码生成bug有关,禁用后可规避该问题。
- 更新Xamarin组件:把Xamarin.Forms、Xamarin.Android等核心组件更新到最新稳定版,旧版本的编译逻辑可能存在已知缺陷。
- 清理重构项目:手动删除所有项目的bin、obj目录,再重新生成整个解决方案,清除缓存的错误编译文件。
- 检查Firebase适配性:日志显示Firebase初始化成功,但组件版本不兼容也可能触发异常,尝试将Firebase相关NuGet包更新到适配当前XF版本的版本。
- 调整代码优化级别:在Android项目发布配置中,将代码优化级别从“全优化”改为“无优化”或“仅程序集优化”,避免过度优化导致IL代码损坏。
内容的提问来源于stack exchange,提问作者Himanshu Dwivedi
相关产品推荐
相关产品推荐

