ASP.NET Firebase Admin 初始化失败 - System.MissingFieldException

ASP.NET FirebaseAdmin fails to initilize - System.MissingFieldException

我有一个 ASP.NET ( Web API ) 项目,我将 FirebaseAdmin 添加到项目中,但在调用 FirebaseMessaging m = FirebaseMessaging.GetMessaging(App);

方法时无法初始化

在新的 Windows Forms 项目上执行相同的步骤工作正常,并且能够传递消息。

An exception of type 'System.MissingFieldException' occurred in FirebaseAdmin.dll but was not handled in user code

Additional information: Field not found: 'Initializer.DefaultHandleUnsuccessfulResponseFunc'.

使用此示例 代码来测试 Firebase:

FirebaseApp App = FirebaseApp.Create(new AppOptions()
{
    Credential = GoogleCredential.FromFile("/path/to/jsonfile.json"),
});

var registrationToken = "cKhzptf1StOPfX82HLf...";

var message = new FirebaseAdmin.Messaging.Message()
{
    Notification = new FirebaseAdmin.Messaging.Notification()
    {
        Title = "Some title",
        Body = "A body",
    },
    Token = registrationToken,
};

// Error is thrown here
FirebaseMessaging m = FirebaseMessaging.GetMessaging(App);

string response = await m.SendAsync(message);

Console.WriteLine("Successfully sent message: " + response);

Web.config 中删除此依赖项可以解决问题,但我不明白为什么

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.1.1.3" newVersion="4.1.1.3" />
</dependentAssembly>

该解决方案是基于Sami提到的解决方案,但是需要对其进行修改。

“DLL Hell”问题是因为 GAC 中 System.Net.Http.dll 的版本错误。 Google.Apis.Auth 包使用了该库,它是 FirebaseAdmin 的一部分。

要修复它,您需要先验证您需要哪个版本。 因为我让它在本地机器上工作,所以我在我的 bin 目录中获取了 System.Net.Http.dll 文件并在 PowerShell 中启动命令以查看版本:

([system.reflection.assembly]::loadfile("C:\Projects\...\EventNotifier\EventNotifier\bin\System.Net.Http.dll")).FullName

回复是

System.Net.Http, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

一旦确定了正确的版本,需要在项目的 web.config 中指定此版本:

        <dependentAssembly>
            <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-9.7.0.0" newVersion="4.0.0.0" />
        </dependentAssembly>

这解决了问题。