Due tipi non uguali dovrebbero essere

Sto cercando di eseguire il debug del codice che utilizza la reflection per caricare i plugin

Ecco il codice di debug:

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

Ed ecco la sua uscita:

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
falso

Non capisco cosa renderebbe questi due tipi diversi?

La stessa class / tipo caricati da domini di app diversi [.NET] o caricatori di classi [Java] non saranno paragonabili e non sono direttamente assegnabili a / da l’altro.

Probabilmente hai due copie della DLL contenente quel tipo – una caricata dal programma principale e una caricata da uno dei metodi Assembly.Load*(...) ?

Prova a visualizzare / confrontare le proprietà:
a.Assembly.Equals(b.Assembly)
e
a.Assembly.Location.Equals(b.Assembly.Location)

In generale, si desidera solo una copia di ogni DLL e caricarla in un singolo dominio dell’app.

Questo può accadere se i due tipi vengono caricati da diverse versioni dell’assieme. .NET li considera diversi, tipi non correlati. Dai un’occhiata

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

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

Ecco come confrontare i tipi:

Confronto del tipo di object C #

Penso che il tuo problema risieda nella gerarchia di tipi …