Два типа не равны

Я пытаюсь отладить некоторый код, который использует отражение для загрузки плагинов

Здесь код отладки:

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 = нейтральный, PublicKeyToken = null
OrtzIRC.Common.MessageContext, OrtzIRC.Common, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null
False

Я не понимаю, что изменило бы эти два типа?

Ответы

Ответ 1

Тот же класс/тип, загруженный различными доменами приложений [.NET] или загрузчиками классов [Java], не будет сравниваться с равными и не будет назначаться напрямую/друг от друга напрямую.

Вероятно, у вас есть две копии DLL, содержащей этот тип: один загружен основной программой и один загружен одним из методов Assembly.Load*(...)?

Попробуйте отобразить/сравнить свойства:
a.Assembly.Equals(b.Assembly)
и
a.Assembly.Location.Equals(b.Assembly.Location)

В общем, вы хотите только одну копию каждой DLL и загрузить ее в один домен приложения.

Ответ 2

Это может произойти, если два типа загружаются из разных версий сборки..NET рассматривает их разные, несвязанные типы. Проверьте

Debug.WriteLine (a.AssemblyQualifiedName) ;
Debug.WriteLine (b.AssemblyQualifiedName) ;

Ответ 4

Попробуйте: Debug.Writeline(a.Equals(b));