以前我是这么调用的,调用的都是我包含在项目里面的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里面  大家多指点

解决方案 »

  1.   

    Activator.CreateInstance(T)这个方法只能用于本程序集中有的类型,如果这个程序集中没有的类型是不能这样创建的。
      

  2.   

    UserControl control = ((UserControl)Activator).CreateInstance(T);
    这样试试。
      

  3.   

    GetExecutingAssembly得到的应该是当前正在执行的程序集.你分开之后当然找不到了.要先Load那个程序集.再取类型.
      

  4.   

    先用Assembly把程序集Load进来就可以了
      

  5.   


    Activator.CreateInstance(T)这个方法只能用于本程序集中有的类型,如果这个程序集中没有的类型是不能这样创建的。 assembly.CreateInstance(namespace)