AppDomain.CurrentDomain.GetAssemblies失败并显示ReflectionTypeLoadException

时间:2013-09-26 09:46:42

标签: c# reflection

在单元测试期间,我遇到了以下代码的问题,该代码要求所有已加载的程序集:

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

此代码失败,并且ReflectionTypeLoadException具有模式的内部异常

  

无法加载类型Microsoft.Xml.Serialization.GeneratedAssembly.FOO

其中FOO是我们编码的一些特定类。

在上述运行单元测试之前出现问题,使用XDocument类创建XML文档。

我可能不会想要加载这些代码生成的类(我猜测Microsoft.Xml.Serialization.GeneratedAssembly。*是代码生成的。)我只是想了解什么是错误的。

3 个答案:

答案 0 :(得分:5)

您应该检查.netframework 4及更高版本中可用的程序集的Is Dynamic字段。

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

答案 1 :(得分:0)

您是否可以打开Fusion日志以查看为何无法加载程序集?

How to enable assembly bind failure logging (Fusion) in .NET

答案 2 :(得分:0)

我最后得出的结论是,为序列化和xmlserialization(以及其他?)生成的运行时代码的类对我来说是无趣的。因此,以下过滤器有帮助

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