Deux types pas égaux qui devraient être

J’essaie de déboguer du code qui utilise la reflection pour charger des plugins

Voici le code de débogage:

Type a = methodInfo.GetParameters()[0] .ParameterType.BaseType; Type b = typeof(MessageContext); Debug.WriteLine(a.AssemblyQualifiedName); Debug.WriteLine(b.AssemblyQualifiedName); Debug.WriteLine(a.Equals(b)); 

Et voici sa sortie:

OrtzIRC.Common.MessageContext, OrtzIRC.Common, Version = 1.0.0.0, Culture = neutre, PublicKeyToken = null
OrtzIRC.Common.MessageContext, OrtzIRC.Common, Version = 1.0.0.0, Culture = neutre, PublicKeyToken = null
Faux

Je ne comprends pas ce qui rendrait ces deux types différents?

Le même type / classe chargé par différents domaines d’application [.NET] ou chargeurs de classes [Java] ne sera pas égal et ne pourra pas être assigné directement l’un à l’autre.

Vous avez probablement deux copies de la DLL contenant ce type – une chargée par le programme principal et une chargée par l’une des méthodes Assembly.Load*(...) ?

Essayez d’afficher / comparer les propriétés:
a.Assembly.Equals(b.Assembly)
et
a.Assembly.Location.Equals(b.Assembly.Location)

En général, vous ne voulez qu’une copie de chaque DLL et la chargez dans un seul domaine d’application.

Cela peut arriver si les deux types sont chargés à partir de versions différentes de l’assembly. .NET les considère différents types, sans rapport. Vérifier

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

Essayez: Debug.Writeline(a.Equals(b));

Voici comment comparer les types:

Comparaison de type d’object C #

Je pense que votre problème réside dans la hiérarchie des types …