Estoy trabajando en un sistema de complemento que carga los archivos .dll contenidos en una carpeta especificada. A continuación, utilizo la reflexión para cargar los ensamblajes, recorrer los tipos que contienen e identificar los que implementan mi interfaz IPlugin
.IsAssignableFrom() devuelve falso cuando debería devolver verdadero
estoy comprobando esto con un código similar al siguiente:
foreach(Type t in myTypes)
{
if(typeof(IPlugin).IsAssignableFrom(t))
{
...
}
}
Por alguna razón IsAssignableFrom() sigue volviendo falsa cuando debería estar regresando cierto. He intentado reemplazar el t
dándole explícitamente un tipo que debería pasar, y funciona bien, pero por alguna razón no funciona con los tipos que se devuelven del ensamblaje cargado. Para hacer las cosas más extrañas, el código funciona bien en la máquina de mi compañero pero no en la mía.
¿Alguien sabe algo que pueda causar este tipo de comportamiento?
Gracias
En mi caso, la comparación de tipo falla solo en el caso de una interfaz y funciona bien para todas las demás interfaces definidas en el mismo conjunto. ¿Por qué sucedería eso? La interfaz que contiene el ensamblaje se copia en la carpeta "bin \ debug" de la aplicación utilizando el evento post-build del proyecto. Por lo tanto, creo que el ensamblado al que se hace referencia en mi proyecto de inicio (utilizando referencia directa del proyecto) es el mismo que el que se copió en la carpeta "bin \ debug" de la aplicación. No es ese el caso? – Learner
Esto fue todo para mí. Mi módulo rechazaba v2.0.0.0 del ensamblado que contenía el tipo que estaba comprobando, mientras que el tipo que implementaba implementaba un tipo con el mismo nombre de la v2.1.0.0 de ese ensamblaje. –
Me parece que esto falla si los ensamblajes se cargan en un contexto de solo reflejo. Aunque ambos tipos tienen el mismo * AssemblyQualifiedName *. –