Visual Studio 2017 Xamarin Forms ListView发布配置数据显示异常求助
解决Release模式下ListView第二列无数据的问题
嘿,这个问题我之前也踩过坑!大概率是Release模式的链接器优化搞的鬼,下面给你分析原因和解决办法:
问题原因
Debug模式下链接器默认是关闭的,所有代码都会被完整保留;但Release模式为了减小安装包体积,默认会启用链接器——它会自动移除它认为“未被使用”的代码。而Xamarin.Forms的数据绑定逻辑在编译时不会被链接器正确识别,导致TrayRow类的AssignedTo属性被误判为无用代码,最终被删掉了,所以第二列就没数据显示。
解决方案
方案一:给TrayRow类添加[Preserve]特性
这是最稳妥的方法,直接告诉链接器要保留这个类的所有成员:
首先需要引用Xamarin.Forms的命名空间,然后修改你的类定义:
using System; using Xamarin.Forms; // 新增这个命名空间 namespace Testing { [Preserve(AllMembers = true)] // 关键特性,强制保留所有成员 class TrayRow { public string Trolly { get; set; } public string AssignedTo { get; set; } } }
方案二:调整链接器全局设置
如果不想修改代码,可以在项目属性里调整链接器的行为:
- 右键你的Xamarin.Forms项目 → 打开「属性」面板
- 根据目标平台选择对应设置:
- Android:进入「Android Options」→「Linker」选项卡,将链接器设置改为Link SDK assemblies only
- iOS:进入「iOS Bundle Signing」→ 找到「Linker Behavior」,选择Link SDK assemblies only
- 这个设置只会优化系统SDK的代码,不会动你的自定义类成员,缺点是安装包体积会稍微大一点。
验证
修改完成后,重新编译Release版本,你的ListView两列应该都能正常显示数据了!
内容的提问来源于stack exchange,提问作者Paddy
相关产品推荐
相关产品推荐

