ReflectionTypeLoadException无法加载一个或>更多请求的类型

时间:2016-05-13 18:17:33

标签: c# unit-testing reflection appdomain

我有以下代码,它包含了我的项目所引用的所有aseemblies以及它们使用的所有引用

var types = AppDomain.CurrentDomain.GetAssemblies().SelectMany(t => t.GetTypes())
                        .Where(t => t.IsClass && !t.IsAbstract && (typeof (MyType).IsAssignableFrom(t)));


foreach (var type in types.Where(type => typeof (MyType).IsAssignableFrom(type)))
                {... do something ...}

在我的开发框中,这可以正常工作,在其他环境中会导致异常

  

System.Reflection.ReflectionTypeLoadException:无法加载一个或   更多请求的类型。检索LoaderExceptions属性   了解更多信息。

为什么抛出这个异常? 是否有可能重构我的代码以使异常被忽略?

2 个答案:

答案 0 :(得分:3)

我有完全相同的问题,但是大会它遇到的问题我并不在乎。

我离开了这里(在当地工作):

Type t = AppDomain.CurrentDomain.GetAssemblies()
              .SelectMany(a => a.GetTypes())
              .Where(a => a.FullName == clientEx.ExceptionType)
              .FirstOrDefault();

对此:

Type t = null;

foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
{
    try
    {
        foreach (Type type in a.GetTypes())
        {
            if (type.FullName == clientEx.ExceptionType)
            {
                t = type;
                break;
            }                                            
        }

        if (t != null)
            break;
    }
    catch (Exception) { }
}

答案 1 :(得分:0)

就我而言,我需要从当前程序集中加载实现类型,因此这对我有用。

var types = (typeof(ClassinAssembly).Assembly)
                                            .GetTypes()
                                            .Where(x => typeof(IMyInterface).IsAssignableFrom(x) && !x.IsInterface && !x.IsAbstract)
                                            .ToList();

foreach (var t in types)
{
  .....
}