C# AppDomain.CurrentDomain.GetAssemblys因ReflectionTypeLoadException失败
在单元测试期间,我遇到了以下代码的问题,该代码要求所有加载的程序集:C# AppDomain.CurrentDomain.GetAssemblys因ReflectionTypeLoadException失败,c#,reflection,C#,Reflection,在单元测试期间,我遇到了以下代码的问题,该代码要求所有加载的程序集: var res = AppDomain.CurrentDomain.GetAssemblies() .SelectMany(x => x.GetTypes()) .ToList(); 此代码因ReflectionTypeLoadException失败,该异常具有模式的内部异常 无法加载类型Microsoft.Xml.Serialization.GeneratedAssembly.FOO 其中FOO是我们也编码的一些特定
var res = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(x => x.GetTypes())
.ToList();
此代码因ReflectionTypeLoadException失败,该异常具有模式的内部异常
无法加载类型Microsoft.Xml.Serialization.GeneratedAssembly.FOO
其中FOO
是我们也编码的一些特定类
在运行前面的unittests时会出现问题,使用XDocument类创建XML文档
我可能不一定要加载这些代码生成的类(我猜Microsoft.Xml.Serialization.GeneratedAssembly.*是代码生成的。)我只是想了解出了什么问题。你能打开Fusion log看看为什么程序集无法加载吗
我最后得出结论,为序列化和xmlserialization(以及其他?)生成的运行时代码类对我来说是不感兴趣的。因此,下面的过滤器有帮助
return AppDomain.CurrentDomain.GetAssemblies()
.Where(x => !x.FullName.StartsWith("Microsoft.GeneratedCode"))
.SelectMany(x => x.GetTypes())
.ToList();
您应该检查程序集的IsDynamic字段,该字段可从.netframework 4及更高版本获得
var res = AppDomain.CurrentDomain.GetAssemblies().Where(ass => ass.IsDynamic == false)
.SelectMany(x => x.GetTypes())
.ToList();
我什么也没发现