7

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

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

此代码因具有模式内部异常的 ReflectionTypeLoadException 而失败

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

我们也编写了FOO一些特定的类。

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

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

4

3 回答 3

5

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

var res = AppDomain.CurrentDomain.GetAssemblies().Where(ass => ass.IsDynamic == false)
.SelectMany(x => x.GetTypes())
.ToList();
于 2014-03-10T10:05:53.117 回答
0

您能否打开 Fusion 日志以查看组件无法加载的原因?

如何在 .NET 中启用程序集绑定失败日志记录 (Fusion)

于 2013-09-26T09:51:53.467 回答
0

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

return AppDomain.CurrentDomain.GetAssemblies()
.Where(x => !x.FullName.StartsWith("Microsoft.GeneratedCode"))
.SelectMany(x => x.GetTypes())
.ToList();
于 2013-09-27T06:48:56.943 回答