.NET MAUI macOS应用无法读取Firebase凭据文件问题求助
.NET MAUI macOS平台无法找到Firebase凭据文件的解决方案
问题根源
Windows平台默认会自动复制标记为内容的文件到输出目录,但macOS的MAUI应用包结构不同,需要明确配置文件属性;同时AppDomain.CurrentDomain.BaseDirectory在macOS环境下的指向无法正确定位到资源文件,导致凭据文件找不到。
解决方案
1. 确保凭据文件被正确复制到输出目录
- 在Visual Studio中选中你的Firebase JSON凭据文件,右键选择「属性」
- 设置生成操作为
Content - 设置复制到输出目录为
如果较新则复制或始终复制
2. 修正路径获取逻辑
替换AppDomain.CurrentDomain.BaseDirectory为MAUI官方推荐的FileSystem.AppDataDirectory,该路径在各平台都指向应用可读写的目录:
string credentialsPath = Path.Combine(FileSystem.AppDataDirectory, "giogo-dee69-firebase-adminsdk-fsksp-1cf7a95106.json"); Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", credentialsPath);
3. 可选:将凭据文件作为嵌入资源(更可靠)
如果上述方法仍有问题,可以将文件嵌入到程序集中,彻底避免路径依赖:
- 设置文件的生成操作为
Embedded resource - 使用以下代码读取并写入到可访问目录:
try { var assembly = typeof(App).Assembly; // 注意:资源名称格式为「项目命名空间.文件名」,需根据实际情况调整 string resourceName = "TestFirebase.giogo-dee69-firebase-adminsdk-fsksp-1cf7a95106.json"; string outputPath = Path.Combine(FileSystem.AppDataDirectory, "giogo-dee69-firebase-adminsdk-fsksp-1cf7a95106.json"); // 将嵌入资源复制到可访问目录 using (Stream inputStream = assembly.GetManifestResourceStream(resourceName)) using (Stream outputStream = File.Create(outputPath)) { inputStream.CopyTo(outputStream); } Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", outputPath); // 初始化Firestore并执行操作 FirestoreDb db = FirestoreDb.Create("giogo-dee69"); DocumentReference coll = db.Collection("NomeCollezione").Document("Capoccione"); Modello DaInserire = new Modello { Username = "Picciotto", NumeroCapelli = 19 }; await coll.SetAsync(DaInserire); } catch (Exception ex) { Console.WriteLine("Errore di connessione a Firestore: " + ex.Message); }
验证方法
运行应用后,可检查macOS应用包内的TestFirebase.app/Contents/MonoBundle目录是否存在该JSON文件,或者查看FileSystem.AppDataDirectory指向的路径下是否有文件生成。
内容的提问来源于stack exchange,提问作者Gabriele Tedeschi
相关产品推荐
相关产品推荐

