代码之家  ›  专栏  ›  技术社区  ›  KallDrexx

在.NET 4中第二次尝试反射时获取ReflectionTypeLoadException

  •  2
  • KallDrexx  · 技术社区  · 14 年前

    在我的项目中,我有以下helper方法,它遍历所有程序集,并获取属于basecamafrom类型子类的所有类型。

        public static List<Type> GetAllTestActionFormTypes()
        {
            List<Type> types = new List<Type>();
    
            // add all the types that are subclasses of BaseCamaForm to the _camaFormType list
            foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
                foreach (Type t in asm.GetTypes())
                    if (t.IsSubclassOf(typeof(BaseCamaForm)))
                        types.Add(t);
    
            return types;
        }
    

    此方法在第一次调用时工作正常。但是,在调用此方法时,当 asm.GetTypes() 被称为:

    ReflectionTypeLoadException was unhandled by user code: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.
    

    在查看loaderException属性时,我发现 System.IO.FileLoadException 显示以下消息:

    Mixed mode assembly is built against version 'v2.0.50727' of the runtime and cannot be loaded in the 4.0 runtime without additional configuration information.
    

    为什么这段代码第一次被调用时工作,但第二次总是例外?


    编辑: 经过更多调查,我引用的运行时版本为2.0.50727的程序集只有Microsoft.TeamFoundation.Client和Microsoft.TeamFoundation.VersionControl.Client。我不明白为什么这些引用会引起思考的问题,也不明白为什么它似乎只发生在第二次尝试中。这似乎偶尔也会在尝试使用 Activator.CreateInstance(types[x]) 请上一些课。
    1 回复  |  直到 14 年前
        1
  •  2
  •   KallDrexx    14 年前

    显然我必须补充 <startup useLegacyV2RuntimeActivationPolicy="true" /> 进入app.config文件。一旦我这样做了,我就不再有反射异常发生了。我还是不知道为什么会这样做,但至少已经解决了。