2013-09-26 9 views
5

Во модульном тестировании я столкнулся с проблемой с помощью следующего кода, который просит для всех загруженных сборок:AppDomain.CurrentDomain.GetAssemblies терпит неудачу с ReflectionTypeLoadException

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

этого код терпит неудачу с ReflectionTypeLoadException, который имеет внутренние исключения из модель

не удалось загрузить тип Microsoft.Xml.Serialization.GeneratedAssembly.FOO

, где FOO - некоторые конкретные классы, также закодированные нами.

Проблема возникает при запуске unittests до вышеописанного, который создает документы XML с использованием класса XDocument.

Возможно, я не хочу загружать эти генерируемые кодом классы (я предполагаю, что Microsoft.Xml.Serialization.GeneratedAssembly. * - это код.) Я просто хочу понять, что случилось.

ответ

5

Вы должны проверить поле IsDynamic вашего устройства, которое доступно в .netframework 4 и более поздних версиях.

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

Я в конечном итоге сделать вывод, что классы, которые во время выполнения кода, сгенерированного для сериализации и xmlserialization (и другие?) Являются uninterestingto меня. Таким образом, следующий фильтр помог

return AppDomain.CurrentDomain.GetAssemblies() 
.Where(x => !x.FullName.StartsWith("Microsoft.GeneratedCode")) 
.SelectMany(x => x.GetTypes()) 
.ToList(); 
Смежные вопросы