Estoy tratando de localizar un tipo en tiempo de ejecución de una lista de ensamblajes; mi código es algo como esto:¿Por qué no funcionarían Type.GetType() y Assembly.GetType()?
foreach (Assembly assembly in assembliesToSearch)
{
Type t = assembly.GetType(assemblyName);
if (t != null)
{
return t;
}
}
, y el problema que tengo es que t siempre viene como nulo. Jugando con el depurador y la ventana intermedia en VS2010, me di cuenta lo siguiente cuando pongo un punto de interrupción dentro del bucle:
Type.GetType(typeof(MyNamespace.MyClass).AssemblyQualifiedName)
funciona bien, pero
assembly.GetType(typeof(MyNamespace.MyClass).AssemblyQualifiedName)
no (cuando el conjunto es el ensamblador que sé que contiene la clase que estoy buscando - en el depurador, puedo poner un reloj en el ensamblado. GetTypes(), navegue a la clase que estoy tratando de crear una instancia, y llame a assembly.GetType ("MyNamespace.MyClass , MyNamespace ")).
¿Alguien sabe por qué funciona la búsqueda de todos los ensamblados que utilizan Type.GetType(), pero la búsqueda en el ensamblado que conozco contiene el tipo que usa assembly.GetType() no?
Gracias por la respuesta; mi ejemplo de código inicial no lo muestra claramente, pero dentro de mi bucle, donde llamo Type t = assembly.GetType (assemblyName), assemblyName es "MyNamespace.MyClass, MyAssembly", por lo que, según mis cálculos, debería estar volviendo. el tipo esperado. –
@David: 'MyNamespace.MyClass, MyAssembly' sigue siendo un nombre de tipo calificado para ensamblaje. Debe quitar el nombre del ensamblado de esa cadena para que funcione con 'Assembly.GetType()'. – adrianbanks
@adrianbanks: dónde aprendiste "Type.GetType() probablemente usará las referencias del ensamblado actual para resolver el tipo" - no parece estar en [MSDN aquí] (http: // msdn) .microsoft.com/es-us/library/w3f99sx1 (v = vs.110) .aspx). Además, ¿qué es el "ensamblaje actual"? En el caso que estoy viendo ahora, el ensamblado con el tipo - ¡que se encuentra! - no es el ensamblado con el método ejecutado actualmente y no es una referencia de él ... pero es un ensamblado en la pila de llamadas.(El motivo de mi pregunta: La versión en mi nombre de conjunto es incorrecta pero se encuentra el tipo.) – davidbak