当存在无法加载的类型时,Assembly.GetTypes() 会引发 ReflectionTypeLoadException。
该异常有一个 Types[] 属性列出了成功加载的类型,还有一个 LoaderExceptions[] 属性列出了加载失败的类型的异常。
我的问题:如何获得与 LoaderExceptions 对应的类型本身?
编辑:我实际上正在寻找无法加载的类型的名称。很抱歉有任何混乱。
当存在无法加载的类型时,Assembly.GetTypes() 会引发 ReflectionTypeLoadException。
该异常有一个 Types[] 属性列出了成功加载的类型,还有一个 LoaderExceptions[] 属性列出了加载失败的类型的异常。
我的问题:如何获得与 LoaderExceptions 对应的类型本身?
编辑:我实际上正在寻找无法加载的类型的名称。很抱歉有任何混乱。
这是不可能的。CLR 未能创建Type
对象,这就是您获得一组LoaderExceptions
. 根本没有Type
对象可以描述Type
加载失败的对象。
当您从某个位置加载的 Dll 已在您的应用程序或父应用程序中引用时,通常会发生此错误。如果 Dll 已经在引用中,则循环通过您的应用程序的Assemblies
.
foreach (var asm in AppDomain.CurrentDomain.GetAssemblies())
{
if (asm.ManifestModule.FullyQualifiedName.EndsWith("YourDllName.dll"))
{
foreach (var Type in asm.GetTypes())
{
// Apply your logic here
}
break;
}
}