紧凑框架C#动态加载DLL
我需要动态使用dll文件中特定名称空间中的一些类,而不是在项目中包含dll文件作为引用 我已经做了一些关于这个主题的研究,并找到了使用Activator、InvokeMember等实现这一点的方法 但是,我在编写正确的代码方面有问题。我需要做一些事情,比如:紧凑框架C#动态加载DLL,c#,dll,compact-framework,C#,Dll,Compact Framework,我需要动态使用dll文件中特定名称空间中的一些类,而不是在项目中包含dll文件作为引用 我已经做了一些关于这个主题的研究,并找到了使用Activator、InvokeMember等实现这一点的方法 但是,我在编写正确的代码方面有问题。我需要做一些事情,比如: A a = new A(); B[] b = a.method(); B b0 = b[0]; 其中A和B是动态加载的dll文件中命名空间中的类类型 我正在尝试调整这段代码: var DLL = Assembly.Load(path_
A a = new A();
B[] b = a.method();
B b0 = b[0];
其中A和B是动态加载的dll文件中命名空间中的类类型
我正在尝试调整这段代码:
var DLL = Assembly.Load(path_to_dll);
//here variables to use later
foreach(Type type in DLL.GetTypes())
{
//here checking if type is what I want and:
var c = Activator.CreateInstance(type);
type.InvokeMember("method", BindingFlags.InvokeMethod, null, c, null);
}
我不知道如何使用InvokeMember返回DLL类型中指定的数组。此外,我需要两个未知类型的变量(在运行时已知)在整个方法块中可见
请给我一些提示。调用成员是正常的-但是您可以将结果强制转换到IList:
IList array = (IList) type.InvokeMember(...);
object firstElement = array[0];
(所有数组都实现了IList
,在这种情况下使用它比数组
稍微简单一些)
您不能使用实际类型作为变量的类型,因为您在编译时不知道它。如果您知道该类型将实现您有权访问的某个适当接口,则可以使用该接口:
IFoo firstElement = (IFoo) array[0];
谢谢你的回复。所以,如果对象“array[0]”没有实现任何接口,那么就没有办法使用它的方法了?