可能重复:
如何在调用Assembly.GetTypes()时阻止ReflectionTypeLoadException
我想获得一个程序集中的所有类型.但是,我收到以下错误:
System.Reflection.ReflectionTypeLoadException:无法加载一个或多个请求的类型.
问题是我得到类型的程序集引用了另一个程序集,该程序集仅在生产环境中可用,而不是在单元测试环境中.
那么,有没有什么方法可以过滤GetTypes或类似的东西,只返回程序集中实际定义的类型,而不是获取类型加载异常?
例如替换
.Assembly.GetTypes().Where(t => t.Namespace.Equals(...
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4301 次 |
| 最近记录: |