Xamarin使用ExcelDataReader遇1252编码NotSupportedException如何解决
可行解决方案
1. 降级System.Text.Encoding.CodePages版本
你当前安装的6.0版本包仅适配.NET 6及更高运行时,与Xamarin.Forms框架不兼容。请将所有项目(共享项目、Android、iOS平台项目)的System.Text.Encoding.CodePages包统一降级到5.0.0稳定版,同时保持ExcelDataReader、ExcelDataReader.DataSet包版本在所有项目中一致。
2. 调整编码注册逻辑到Android平台入口
Xamarin.Forms共享项目的App构造函数执行时,平台初始化还未完成,编码注册不会生效。请将注册逻辑迁移到Android项目的MainActivity.cs的OnCreate方法中,同时添加显式引用1252编码的代码,防止链接器裁剪掉未直接调用的编码资源:
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // 注册编码提供器 System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); // 显式引用1252编码,避免被链接器裁剪 var tempEnc = System.Text.Encoding.GetEncoding(1252); Xamarin.Essentials.Platform.Init(this, savedInstanceState); global::Xamarin.Forms.Forms.Init(this, savedInstanceState); LoadApplication(new App()); }
3. 配置链接器忽略裁剪编码相关程序集
如果你的Android项目开启了全程序集链接优化,需要新增链接器配置文件避免编码相关逻辑被误删:
- 在Android项目根目录新建
linker.xml文件,右键设置文件属性为LinkDescription - 写入以下内容:
<linker> <assembly fullname="System.Text.Encoding.CodePages"> <type fullname="System.Text.CodePagesEncodingProvider" preserve="all" /> </assembly> <assembly fullname="System.Text.Encoding"> <method name="GetEncoding" signature="System.Text.Encoding(System.Int32)" /> </assembly> </linker>
4. 清理重建项目
完成以上配置后,执行以下操作:
- 清空所有项目的bin、obj文件夹
- 执行Nuget包还原
- 重新编译部署项目到模拟器测试
内容的提问来源于stack exchange,提问作者RogerB
相关产品推荐
相关产品推荐

