当.net core 项目给.net framework 用easynetq发送信息的时候。出现异常,例如以string对象为例。抛出异常:“Could not load assembly 'System.Private.CoreLib'”

因为:.net core 的string 对象是在System.Private.CoreLib程序集下,System.String命名空间下;而.net framework的string对象是在mscorlib程序集下,System.String命名空间下

easynetq反序列化对象前,会拿到当前对象的类型,拿到类型之后会从对应的程序集去加载,而.net framework当然没有System.Private.CoreLib.dll,所以失败。

解决办法:替换ITypeNameSerializer组件  官方替换各种组件方法

源码地址

关键源码(版本6.3.1):

  private static Type GetTypeFromTypeNameKey(TypeNameKey typeNameKey)
        {
            var assemblyName = typeNameKey.AssemblyName;
            var typeName = typeNameKey.TypeName;

            if (assemblyName != null)
            {
                var assembly = Assembly.Load(new AssemblyName(assemblyName));
                if (assembly == null)
                {
                    throw new EasyNetQException($"Could not load assembly '{assemblyName}'");
                }

                var type = assembly.GetType(typeName);
                if (type == null)
                {
                    // if generic type, try manually parsing the type arguments for the case of dynamically loaded assemblies
                    // example generic typeName format: System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
                    if (typeName.IndexOf('`') >= 0)
                    {
                        try
                        {
                            type = GetGenericTypeFromTypeName(typeName, assembly);
                        }
                        catch (Exception ex)
                        {
                            throw new EasyNetQException($"Could not find type '{typeName}' in assembly '{assembly.FullName}'", ex);
                        }
                    }

                    if (type == null)
                    {
                        throw new EasyNetQException($"Could not find type '{typeName}' in assembly '{assembly.FullName}'");
                    }
                }

                return type;
            }

            return Type.GetType(typeName);
        }
View Code

相关文章:

  • 2022-12-23
  • 2021-07-18
  • 2021-12-25
  • 2021-10-02
  • 2021-11-24
  • 2020-02-07
  • 2018-07-11
猜你喜欢
  • 2022-12-23
  • 2021-05-24
  • 2021-05-21
  • 2022-03-03
  • 2021-10-26
  • 2022-02-13
  • 2021-06-11
相关资源
相似解决方案