Sto cercando di individuare un tipo in fase di esecuzione da un elenco di assiemi; il mio codice è qualcosa del genere:Perché Type.GetType() funziona e Assembly.GetType() non funziona?
foreach (Assembly assembly in assembliesToSearch)
{
Type t = assembly.GetType(assemblyName);
if (t != null)
{
return t;
}
}
e il problema che ho è che t è sempre in arrivo come null. Giocare con il debugger e la finestra intermedia in VS2010, ho notato quanto segue quando ho messo un punto di interruzione all'interno del ciclo:
Type.GetType(typeof(MyNamespace.MyClass).AssemblyQualifiedName)
funziona bene, ma
assembly.GetType(typeof(MyNamespace.MyClass).AssemblyQualifiedName)
non lo fa (quando il montaggio è il assembly che conosco contiene la classe che sto cercando - nel debugger, posso mettere un watch su assembly.GetTypes(), navigare nella classe che sto cercando di istanziare e chiamare assembly.GetType ("MyNamespace.MyClass , MyNamespace ")).
Qualcuno sa perché la ricerca di tutti gli assembly utilizzando Type.GetType() funziona, ma la ricerca dell'assembly che conosco contiene il tipo utilizzando assembly.GetType() no?
Grazie per la risposta; il mio esempio di codice iniziale non lo mostra chiaramente, ma all'interno del mio ciclo in cui sto chiamando Type t = assembly.GetType (assemblyName), assemblyName è "MyNamespace.MyClass, MyAssembly", quindi secondo i miei calcoli, dovrebbe tornare il tipo previsto. –
@David: 'MyNamespace.MyClass, MyAssembly' è ancora un nome di tipo qualificato per assembly. È necessario eliminare il nome dell'assembly da quella stringa affinché funzioni con 'Assembly.GetType()'. – adrianbanks
@adrianbanks - dove hai imparato "Type.GetType() molto probabilmente utilizzerà i riferimenti dell'assembly corrente per risolvere il tipo" - non sembra essere nel [MSDN qui] (http: // msdn .microsoft.com/en-us/library/w3f99sx1 (v = vs.110) aspx). Inoltre, qual è il "montaggio corrente"? Nel caso che sto guardando ora, l'assemblaggio con il tipo - che si trova! - non è l'assembly con il metodo attualmente eseguito e non è un riferimento di esso ... ma è un assembly sullo stack di chiamate.(La ragione della mia domanda: La versione nel mio nome assembly è sbagliata ma il tipo è stato trovato.) – davidbak