You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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项目开启了全程序集链接优化,需要新增链接器配置文件避免编码相关逻辑被误删:

  1. 在Android项目根目录新建linker.xml文件,右键设置文件属性为LinkDescription
  2. 写入以下内容:
<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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:06:04