应该是两种不相等的类型

我正在尝试调试一些使用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#对象类型比较

我认为你的问题存在于类型层次结构中……