ASP.NET FirebaseAdmin无法初始化-System.MissingFieldException



我有一个ASP.NET(Web API(项目,我向该项目添加了FirebaseAdmin,但在调用方法FirebaseMessaging m = FirebaseMessaging.GetMessaging(App);时无法初始化

在一个新的Windows窗体项目中,同样的步骤运行得很好,并且能够传递信息。

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>

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

";DLL地狱"问题是因为GAC中存在错误版本的System.Net.Http.dll。该库由FirebaseAdmin的Google.Apis.Auth包使用。

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

([system.reflection.assembly]::loadfile("C:Projects...EventNotifierEventNotifierbinSystem.Net.Http.dll")).FullName

反应是

System.Net.Http,版本=4.0.0.0,区域性=中性,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>

这解决了问题。

相关内容

最新更新