我正在使用Reflection来加载程序集并调用标记为Internal的类的方法,但是我在运行时让代码正确运行时遇到了一些问题。
不幸的是,我所处理的大多数类型也属于同一类。
我有类似以下的内容:
Type MyType = Type.GetType("My.MyClass, My.Assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxx", true);
dynamic list = MyType.GetMethod("getList").Invoke(concreteType, null);
foreach (dynamic item in list)
{
MyObject data = item.GetData();
}
其中:
concreteType
是使用Activator.CreateInstance
MyType
是My.Assembly DLL中的内部类型。getList
将返回,例如列表MyList<MyItem>
的类型,但这是上述程序集的内部。item
变量类型也是同一DLL的内部变量,为此我们假设其类型为MyItem
。MyType
MyList
MyItem
)拉入Type变量。MyObject
是我可以在当前项目中访问的类型当我运行上面的代码时,我在foreach
循环上得到一个例外:
InvalidOperationException: Dynamic operations can only be performed in homogenous AppDomain.
我尝试使用object
或var
代替dynamic list
但是我收到编译错误,因为foreach
循环不想迭代类型Object
。
我不认为我可以使用Type
变量静态输入其中一些变量。
搜索异常错误也会产生大量无关信息,因此我不太确定如何缩小结果范围。
有没有办法让这个循环完全运行?
我还应该提到,这被编码为SharePoint 2013的自定义解决方案,因此我也不确定运行时环境是否会因此而有所不同。