使用Firesharp向Firebase RTDB写入数据时遇PUT请求错误求助
解决Mac上用Firesharp连接Firebase RTDB时的程序集加载错误
看起来你遇到的核心问题是Firesharp框架和.NET Core/.NET 5+的兼容性冲突——这个库是针对旧版.NET Framework开发的,而Mac版Visual Studio默认创建的是跨平台的.NET Core/.NET 6+项目,System.Security.Permissions这个程序集在新版本里已经被移除出默认依赖,再加上Firesharp已经多年没有更新,对跨平台.NET的支持很差,才导致了这个加载错误。
下面给你两种解决方案,优先推荐官方SDK的方案,稳定性和兼容性都更有保障:
方案一:改用Firebase官方Admin SDK(强烈推荐)
官方的Firebase Admin SDK完全支持跨平台(包括Mac),而且维护活跃,不会出现这类兼容性问题。具体步骤如下:
- 安装NuGet包
在项目终端里执行命令安装官方SDK:
dotnet add package FirebaseAdmin
- 获取服务账号密钥
- 打开Firebase控制台,进入你的项目
- 点击右上角设置图标 → 项目设置 → 服务账号
- 点击「生成新的私钥」,下载JSON格式的密钥文件,把它放到项目根目录,记得在文件属性里设置「复制到输出目录」为「如果较新则复制」
- 修改代码实现数据写入
替换你的代码为以下内容:
using FirebaseAdmin; using Google.Apis.Auth.OAuth2; using FirebaseAdmin.Database; class Program { static async Task Main(string[] args) { Console.WriteLine("Hello World!"); // 初始化Firebase Admin SDK if (FirebaseApp.DefaultInstance == null) { FirebaseApp.Create(new AppOptions() { Credential = GoogleCredential.FromFile("你的服务账号密钥文件名.json"), }); } var db = FirebaseDatabase.DefaultInstance; var reference = db.GetReference("0"); // 注意路径不要带末尾斜杠 // 准备并写入数据 var data = new Data { id = "Hello", text = "World" }; await reference.SetValueAsync(data); Console.WriteLine("数据写入成功!"); } } public class Data { public string id { get; set; } public string text { get; set; } }
方案二:继续使用Firesharp(不推荐)
如果你非要坚持用Firesharp,可以尝试以下步骤,但不保证能解决所有跨平台兼容问题:
- 安装缺失的程序集包
在项目终端执行命令,手动添加System.Security.Permissions包:
dotnet add package System.Security.Permissions
- 修正路径写法
你的SetAsync("0/", data)里路径末尾的斜杠可能有问题,改成不带斜杠的格式:
SetResponse response = await client.SetAsync("0", data);
- 避免
.Wait()导致的死锁
把Main方法改成异步,直接用await而不是.Wait():
static async Task Main(string[] args) { Console.WriteLine("Hello World!"); client = new FireSharp.FirebaseClient(config); if (client != null) { Console.WriteLine("Connection established!"); await AddData(); // 直接await,不要用Wait() } }
不过还是要提醒你,Firesharp已经多年没有更新,后续可能会遇到更多跨平台或.NET版本兼容的问题,所以优先推荐官方SDK方案。
内容的提问来源于stack exchange,提问作者Koh
相关产品推荐
相关产品推荐

