在装配中获取定义的类型只有[复制](Get Types defined in an assembly

2019-09-24 03:15发布

可能重复:
如何调用Assembly.GetTypes时,为防止ReflectionTypeLoadException()

我想获得的所有类型在组件中。 不过,我得到以下错误:

System.Reflection.ReflectionTypeLoadException:无法加载请求的类型中的一种或多种。

问题是我收到的类型是从引用,而不是单元测试环境中的另一个组件只在生产环境中可用的组件。

那么,有没有我可以筛选装配实际上定义GetTypes或类似只返回类型的东西,并没有得到类型负载例外的任何方式?

例如,替代

.Assembly.GetTypes().Where(t => t.Namespace.Equals(...

Answer 1:

GetTypes只得到在装配中定义的类型,但是,您可能不能够因为它们引用的是在你还没有加载或无法找到的组件类型加载它们。 例如,如果你尝试加载从类派生在这个其他装配一个类型,那么你会得到一个ReflectionTypeLoadException 。 你可以得到你从异常对象做负载类型的Types属性。 请注意,会有一个null每种类型,你可以不加载和LoaderExceptions酒店为他们每个人一个例外。

public static Type[] GetTypesLoaded(Assembly assembly)
{
    Type[] types;
    try
    {
      types = assembly.GetTypes();
    }
    catch (ReflectionTypeLoadException e)
    {
      types = e.Types.Where(t => t != null).ToArray();
    }

    return types;    
}


文章来源: Get Types defined in an assembly only [duplicate]
标签: c# .net-4.0