在我的项目中,我有以下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])
请上一些课。