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

使用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),而且维护活跃,不会出现这类兼容性问题。具体步骤如下:

  1. 安装NuGet包
    在项目终端里执行命令安装官方SDK:
dotnet add package FirebaseAdmin
  1. 获取服务账号密钥
  • 打开Firebase控制台,进入你的项目
  • 点击右上角设置图标 → 项目设置 → 服务账号
  • 点击「生成新的私钥」,下载JSON格式的密钥文件,把它放到项目根目录,记得在文件属性里设置「复制到输出目录」为「如果较新则复制」
  1. 修改代码实现数据写入
    替换你的代码为以下内容:
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,可以尝试以下步骤,但不保证能解决所有跨平台兼容问题:

  1. 安装缺失的程序集包
    在项目终端执行命令,手动添加System.Security.Permissions包:
dotnet add package System.Security.Permissions
  1. 修正路径写法
    你的SetAsync("0/", data)里路径末尾的斜杠可能有问题,改成不带斜杠的格式:
SetResponse response = await client.SetAsync("0", data);
  1. 避免.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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:29:54