反射 调类cs文件没事,但是调用DLL出错高分
以前我是这么调用的,调用的都是我包含在项目里面的cs文件,这些文件都是UserControl,是cs但是没有编译成dll.这样调用没问题.
string str= "water.sysmanage.datasave ";
Type t = Type.GetType(str);
UserControl control=(UserControl)Assembly.GetExecutingAssembly().CreateInstance(str);
if(control!=null)
this.panelfill.Controls.Add(control);
后来想分开做功能,其他组员给我UserControl编译好的dll但是调用不成功以下是调用代码,请高手分析下.就是想把这个dll进行实例化然后填充到panel里面
//读取选择指定的dll文件
string strPath = @ "D:\DDLinfo\bin\Debug\datasave.dll ";
string NameSpace = "water.sysmanage.datasave ";
//加载指定的程序集之内存中
Assembly assembly = Assembly.LoadFrom(strPath);
//返加程序集中的一个指定的对象,哪果是返回所有对象,则用GetTypes()返回一个Typt对象的数组.
Type T = assembly.GetType(NameSpace);
//根据前面type类型创建一个对象 *******************下面这行报错.调用发生异常
UserControl control = (UserControl)Activator.CreateInstance(T);
if (c != null)
this.panelfill.Controls.Add(control);
我就是想把个 UserControl的dll fill到panel里面 大家多指点
------解决方案--------------------assembly.CreateInstance(namespace)
------解决方案--------------------mark
------解决方案--------------------assembly.CreateInstance(T.FullName);
------解决方案--------------------Activator.CreateInstance(T)这个方法只能用于本程序集中有的类型,如果这个程序集中没有的类型是不能这样创建的。
------解决方案--------------------支持
------解决方案--------------------什么错误?
------解决方案--------------------UserControl control = ((UserControl)Activator).CreateInstance(T);
这样试试。
------解决方案--------------------GetExecutingAssembly得到的应该是当前正在执行的程序集.
你分开之后当然找不到了.
要先Load那个程序集.再取类型.
------解决方案--------------------先用Assembly把程序集Load进来就可以了
------解决方案--------------------agree with you
------解决方案-------------------- Activator.CreateInstance(T)这个方法只能用于本程序集中有的类型,如果这个程序集中没有的类型是不能这样创建的。
assembly.CreateInstance(namespace)