2013-09-26 15 views
5

Durante unit testing che abbia incontrato un problema con il seguente codice che chiede per tutti i gruppi caricati:AppDomain.CurrentDomain.GetAssemblies fallisce con ReflectionTypeLoadException

var res = AppDomain.CurrentDomain.GetAssemblies() 
.SelectMany(x => x.GetTypes()) 
.ToList(); 

questo codice fallisce con un ReflectionTypeLoadException che ha eccezioni interne del Reticolo

Impossibile caricare il tipo Microsoft.Xml.Serialization.GeneratedAssembly.FOO

dove FOO sono alcune classi specifiche anch'esse codificate da noi.

Il problema si verifica quando si eseguono le unittest precedenti a quanto sopra che crea documenti XML utilizzando la classe XDocument.

È possibile che non sia necessario caricare queste classi generate dal codice (suppongo che Microsoft.Xml.Serialization.GeneratedAssembly. * Sia generato dal codice.) Voglio solo capire che cosa è sbagliato.

risposta

5

È necessario verificare il campo IsDynamic dell'assieme disponibile in .netframework 4 e versioni successive.

var res = AppDomain.CurrentDomain.GetAssemblies().Where(ass => ass.IsDynamic == false) 
.SelectMany(x => x.GetTypes()) 
.ToList(); 
0

ho finito per concludere che le classi che sono il codice runtime generato per la serializzazione e xmlserialization (e gli altri?) Sono uninterestingto me. Quindi il seguente filtro ha aiutato

return AppDomain.CurrentDomain.GetAssemblies() 
.Where(x => !x.FullName.StartsWith("Microsoft.GeneratedCode")) 
.SelectMany(x => x.GetTypes()) 
.ToList(); 
Problemi correlati