获取仅在程序集中定义的类型

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

我想获得一个程序集中的所有类型。 但是,我收到以下错误:

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

问题是我得到类型的程序集是引用另一个程序集,它只在生产环境中可用,而不是在unit testing环境中。

那么,有没有什么方法可以过滤GetTypes或类似的东西只返回程序集中实际定义的类型而不是类型加载exception?

例如替换

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

GetTypes仅获取程序集中定义的类型,但是,您可能无法加载它们,因为它们引用了尚未加载或无法找到的程序集中的类型。 例如,如果您尝试加载从此其他程序集中的类派生的类型,则会得到ReflectionTypeLoadException 。 您可以从exception对象的Types属性中获取已加载的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; }