Xamarin Forms控件脱离调试器运行时出现样式丢失问题咨询
Xamarin Forms 调试模式正常、非调试模式样式丢失常见原因及解决方案
- 链接器裁剪导致相关代码被移除
Release模式下Xamarin默认开启链接器优化,会自动删除未被显式调用的程序集代码,包括自定义渲染器、样式关联的控件类型、资源字典中引用的类型等,而调试模式下链接器默认关闭因此不会触发该问题。
解决方法:- 在项目属性的链接器配置中,将样式相关的自定义程序集、Xamarin.Forms核心程序集设置为「不链接」
- 给需要保留的类、方法添加
[Preserve]特性,告知链接器不要裁剪该部分代码
- 条件编译逻辑导致资源未加载
检查全局样式、资源字典的加载代码是否包含#if DEBUG条件编译标记,导致仅在调试模式下加载了全局样式资源,非调试模式下跳过了资源加载步骤。 - 动态资源/绑定逻辑异常未被捕获
调试模式下部分非致命异常会被调试器吞掉或忽略,非调试模式下样式绑定、值转换器、自定义标记扩展抛出的异常会导致样式赋值失败。可给绑定添加FallbackValue做降级处理,同时在绑定相关逻辑中增加异常捕获定位问题。 - Fast Renderers 兼容性问题
部分版本Xamarin Forms的Fast Renderers(快速渲染器)在Release模式下存在样式解析异常的已知bug,可在对应平台的初始化代码中关闭快速渲染器验证:
Android端在MainActivity的OnCreate方法中,Forms.Init之前添加代码:Forms.SetFlags("DisableFastRenderers"); - 编译优化导致XAML解析异常
检查是否开启了XAML编译(XAMLC),部分错误的XAML语法在调试模式下可以被兼容解析,非调试模式的严格XAML编译会导致样式解析失败。可临时关闭XAMLC验证是否是该问题导致。
内容的提问来源于stack exchange,提问作者Peter Hennessy
相关产品推荐
相关产品推荐

