【问题标题】:Hangfire looking for ISet in mscorlib.dllHangfire 在 mscorlib.dll 中寻找 ISet
【发布时间】:2021-11-25 16:28:37
【问题描述】:

升级到 .NET6 后,我在 Hangfire 中遇到了这个运行时异常

System.TypeLoadException: Could not load type 'System.Collections.Generic.ISet`1' from assembly 'mscorlib, Version=4.0.0.0
at Hangfire.Common.TypeHelper.TypeResolver(Assembly assembly, String typeName, Boolean ignoreCase)    
at Hangfire.Common.TypeHelper.DefaultTypeResolver(String typeName)    
at System.Linq.Enumerable.SelectArrayIterator`2.ToArray()    
at Hangfire.Storage.InvocationData.DeserializeJob()

据我所知,ISet 不在 mscorlib.dll 中。根据文档,它应该在 System.Runtime.dll 中。

任何想法为什么 Hangfire 会这样做?我正在使用 Hangfire.AspNetCore 1.7.27。

【问题讨论】:

  • 我认为您应该在 hangfire 数据库中查找以 ISet 作为参数的旧重复或计划作业,或者具有属性(或子 * 属性)为 ISet 的参数
  • 哦,哇,我一直专注于认为这是某种包/dll 问题,我没有考虑查看数据库。我使用的是内存数据库,但切换到基于文件的数据库我确实可以看到我们正在使用 ISet 参数插入作业。非常感谢您的提示,我会看看我现在是否能弄清楚如何处理这个问题并会回复
  • 出于兴趣,为什么 ISet 现在成了问题?
  • 顺便说一句,这似乎确实有效!我将我们存储的参数从一个集合更改为一个简单的字符串数组,我正在克服错误,谢谢。如果您作为答案发布,我会将其标记为已接受,干杯。如果您能提及 ISet 不再有效的原因,则可以加分 :)

标签: hangfire mscorlib


【解决方案1】:

正如 cmets 中所说,您应该在您的 Hangfire 数据库中查找带有 ISet 的序列化参数。 正是这个参数的反序列化导致了这个问题,如下所示:

at Hangfire.Storage.InvocationData.DeserializeJob()

至于问题的根本原因,我首先认为该作业已使用旧版本的框架入队,而出队尝试使用新版本的框架。但这也可能是序列化设置问题,正如this older answer

所述

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    相关资源
    最近更新 更多