在我的项目中,我有以下帮助器方法,它遍历所有程序集并获取所有类型的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])
调用时,似乎偶尔也会出现这种情况。
答案 0 :(得分:2)
显然我必须将<startup useLegacyV2RuntimeActivationPolicy="true" />
添加到我的app.config文件中。一旦我这样做,我不再发生反射异常。我仍然不知道为什么会这样做,但至少它是固定的。