Estoy teniendo algunos problemas con el siguiente código:Type.IsSubclassOf() no funciona en AppDomains?
private class ClientPluginLoader : MarshalByRefObject
{
public bool IsPluginAssembly(string filename)
{
AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += new ResolveEventHandler(CurrentDomainReflectionOnlyAssemblyResolve);
Assembly asm = Assembly.ReflectionOnlyLoadFrom(filename);
Type[] types = asm.GetTypes();
foreach (Type type in types)
{
if (type.IsSubclassOf(typeof(ClientPlugin)))
{
return true;
}
}
return false;
}
}
El código se llama a través de un proxy que he creado a través de mi dominio CreateInstanceFromAndUnwrap aplicación personalizada(). Esto significa que IsPluginAssembly() se ejecuta en el contexto de mi dominio de aplicación personalizada.
El problema es que la llamada a IsSubclassOf() siempre devuelve falso, aunque en mi humilde opinión debe ser verdadero. El "tipo" en cuestión realmente hereda de ClientPlugin; no hay dudas al respecto.
ClientPlugin se define en un ensamblaje privado diferente, que estoy resolviendo manualmente, como se evidencia en el fragmento de código anterior.
He puesto un punto de interrupción en la línea if (type.IsSubclassOf(...))
y confirmó esta expresión es falsa:
type.BaseType == typeof(ClientPlugin)
Por otro lado, esta expresión es verdadera:
type.BaseType.FullName == typeof(ClientPlugin).FullName
cómo es esto posible ? ¿Que esta pasando?
ACTUALIZACIÓN: Kent Boogaart me indicó la dirección correcta. Busqué en la web un poco más y me encontré con la publicación de blog this. Parece que tendré que resolver mis conflictos Load/LoadFrom/ReflectionOnlyLoadFrom para que esto funcione.
Tuve exactamente este problema, tenía dos copias de la misma DLL en dos carpetas. Al ejecutar el "IsSubclassOf" manualmente, recibí este mensaje de error: El tipo 'ServiceCore.BaseService' existe en 'ServiceCore.dll' y 'ServiceCore.dll' – vpalmu