C#创建Firestore数据库无报错却执行终止问题求助
Firestore客户端初始化后程序无提示终止的解决思路
针对你遇到的问题——存储桶访问正常但Firestore客户端操作导致程序无提示终止、异常未被捕获,可按以下方向排查:
确认Firestore数据库已创建并生效
确保Firebase控制台中已完成Firestore数据库的创建(需选择数据库位置,如us-central1),新创建的数据库可能需要数分钟才能完全生效。服务账号属于项目即自动关联Firestore,无需额外关联操作。显式传入凭据初始化Firestore客户端
避免依赖隐式凭据加载,直接传入已验证有效的服务账号密钥:var credential = GoogleCredential.FromFile("/Users/juliustolksdorf/Projects/Interior Circle/keys/interiorcircle-4f70f209e160.json"); var db = new FirestoreDbBuilder { ProjectId = "interiorcircle", Credential = credential }.Build();修复异步代码未等待的问题
这是最可能的原因:如果包含await docRef.SetAsync(user)的方法是async void,或者调用方未等待异步任务,抛出的异常无法被外层catch捕获,会直接终止进程。- 将方法签名改为
async Task而非void - 控制台程序入口需改为
async Task Main():static async Task Main(string[] args) { try { var credential = GoogleCredential.FromFile("密钥路径"); var storage = StorageClient.Create(credential); var buckets = storage.ListBuckets("interiorcircle"); foreach (var bucket in buckets) { Console.WriteLine(bucket.Name); } var db = new FirestoreDbBuilder { ProjectId = "interiorcircle", Credential = credential }.Build(); DocumentReference docRef = db.Collection("users").Document("alovelace"); Dictionary<string, object> user = new Dictionary<string, object> { { "First", "Ada" }, { "Last", "Lovelace" }, { "Born", 1815 } }; await docRef.SetAsync(user); } catch(Exception e) { Console.WriteLine(e.ToString()); } }
- 将方法签名改为
启用客户端日志排查底层错误
开启Debug级日志,查看Firestore客户端的详细操作日志,定位隐藏问题:using Microsoft.Extensions.Logging; var loggerFactory = LoggerFactory.Create(builder => { builder.AddConsole(); builder.SetMinimumLevel(LogLevel.Debug); }); var db = new FirestoreDbBuilder { ProjectId = "interiorcircle", Credential = credential, LoggerFactory = loggerFactory }.Build();验证服务账号Firestore权限
虽然你是项目所有者,仍需确认服务账号拥有Cloud Datastore User或Firestore Admin权限(项目所有者默认包含),可前往IAM控制台检查权限配置,必要时重新保存权限以触发同步。
内容的提问来源于stack exchange,提问作者innom
相关产品推荐
相关产品推荐

