应该是两种不相等的类型

Bri*_*tiz 16 .net c# 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));
Run Code Online (Sandbox Code Playgroud)

这是它的输出:

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
False

我不明白是什么让这两种类型不同?

Jor*_*lin 19

由不同的应用程序域[.NET]或类加载器[Java]加载的相同类/类型将不会比较相等并且不能直接相互分配.

您可能有两个包含该类型的DLL副本 - 一个由主程序加载,另一个由其中一个Assembly.Load*(...)方法加载?

尝试显示/比较属性:
a.Assembly.Equals(b.Assembly)

a.Assembly.Location.Equals(b.Assembly.Location)

通常,您只需要每个DLL的一个副本并将其加载到单个应用程序域中.

  • 你是对的,它正在加载同一个组件的两个副本.其中一个被复制到插件目录,所以我猜插件正在加载那个插件,而不是已经在应用程序域中的插件.所以我刚刚删除了程序集并关闭了"复制本地"并且它有效.谢谢! (2认同)