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>
这解决了问题。
我有一个 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>
这解决了问题。