应该是两种不相等的类型
我正在尝试调试一些使用reflection来加载插件的代码
这是调试代码:
Type a = methodInfo.GetParameters()[0] .ParameterType.BaseType; Type b = typeof(MessageContext); Debug.WriteLine(a.AssemblyQualifiedName); Debug.WriteLine(b.AssemblyQualifiedName); Debug.WriteLine(a.Equals(b));
这是它的输出:
OrtzIRC.Common.MessageContext,OrtzIRC.Common,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null
OrtzIRC.Common.MessageContext,OrtzIRC.Common,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null
假
我不明白是什么让这两种类型不同?
由不同应用程序域[.NET]或类加载器[Java]加载的相同类/类型将不会比较相等并且不能直接相互分配。
您可能有两个包含该类型的DLL副本 – 一个由主程序加载,另一个由Assembly.Load*(...)
方法加载?
尝试显示/比较属性:
a.Assembly.Equals(b.Assembly)
和
a.Assembly.Location.Equals(b.Assembly.Location)
通常,您只需要每个DLL的一个副本并将其加载到单个应用程序域中。
如果从程序集的不同版本加载两种类型,则会发生这种情况。 .NET认为它们是不同的,不相关的类型。 校验
Debug.WriteLine (a.AssemblyQualifiedName) ; Debug.WriteLine (b.AssemblyQualifiedName) ;
尝试: Debug.Writeline(a.Equals(b));
这是你应该如何比较类型:
C#对象类型比较
我认为你的问题存在于类型层次结构中……