在单元测试期间,我遇到了以下代码的问题,该代码要求所有已加载的程序集:
var res = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(x => x.GetTypes())
.ToList();
此代码失败,并且ReflectionTypeLoadException具有模式的内部异常
无法加载类型Microsoft.Xml.Serialization.GeneratedAssembly.FOO
其中FOO
是我们编码的一些特定类。
在上述运行单元测试之前出现问题,使用XDocument类创建XML文档。
我可能不会想要加载这些代码生成的类(我猜测Microsoft.Xml.Serialization.GeneratedAssembly。*是代码生成的。)我只是想了解什么是错误的。
答案 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();