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

Xamarin Mono初始化Cloud Firestore时Build()抛出InvalidDataException

问题说明
  • 参考Firestore凭据结合配置初始化的方案执行Firebase凭据序列化,该步骤运行无异常
  • 编写如下代码创建Firestore数据库实例时,在Build方法执行环节触发程序崩溃:
string firebaseJson = fsi.Serialize(); // 该步骤运行正常

FirestoreDbBuilder fsDBBuilder = new FirestoreDbBuilder
{
    ProjectId = fbSettings.ProjectId,
    JsonCredentials = firebaseJson // 服务账号JSON文件内容
}; // 该步骤运行正常

FirestoreDb db = fsDBBuilder.Build(); // 该行触发程序崩溃
  • 抛出异常信息:System.IO.InvalidDataException: 'Invalid sequence, too long.'
  • 从异常堆栈可以定位到,错误发生在Google Auth库解析PKCS8格式RSA私钥的环节。
问题根因

这个报错没有特殊场景,本质是SDK读取到的服务账号私钥不符合PKCS8格式要求,99%的情况都是序列化/存储/读取凭据的过程中把JSON内容改坏了,常见触发原因:

  • 私钥中的换行符被错误处理:服务账号私钥为PEM格式,换行是格式强制要求,很多人在序列化、存配置的时候会把私钥字符串里的转义换行\n处理成字面量\\n,或者直接删除所有换行把内容拼成一整行,SDK解析时无法识别合法的ASN1结构,就会抛出该异常。
  • 私钥内容被污染:序列化、转码过程中私钥被截断,或者混入多余的转义字符、空格,比如做了HTML/XML转义修改了特殊字符。
  • 凭据类型错误:误将客户端/Web端使用的Firebase公开配置当成服务账号凭据传入,这类配置里没有合法的PKCS8私钥字段。
  • 极少数情况为旧版Google.Apis.Auth依赖包存在私钥解析兼容bug。
解决步骤
  1. 先做基准测试排除SDK问题:跳过自定义的序列化逻辑,直接把从谷歌云控制台下载的原始服务账号JSON文件路径赋值给FirestoreDbBuilder.CredentialsPath属性,不传入JsonCredentials参数,执行Build方法。如果这步能正常运行,可100%确认问题出在自定义的凭据处理逻辑,和SDK本身无关。
  2. 断点校验序列化后的凭据内容:在Build行前断点查看firebaseJson变量的完整内容,重点检查private_key字段:
    • 字段值必须以-----BEGIN PRIVATE KEY-----开头,以-----END PRIVATE KEY-----结尾
    • 两个标识中间的Base64内容需按每64字符保留换行,不能拼接为单行
    • 如果内容中出现\\n形式的双反斜杠加n字符,全局替换为实际换行符\n即可
  3. 简化凭据处理逻辑:没有特殊需求的话,直接读取原始服务账号JSON文件的全量字符串赋值给JsonCredentials即可,不要对内容做多余的转义、格式化处理,等流程跑通后再逐步调整配置存储方案。
  4. 如果基准测试用原始凭据文件也报错,直接将项目中Google.Cloud.Firestore、Google.Apis.Auth相关的所有NuGet包升级到最新稳定版,排除版本兼容问题。

内容的提问来源于stack exchange,提问作者Sam Mazza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:54:27