我写了个ActiveX控件,控件内部代码在调用Assembly.CreateInstance方法的时候一直返回空;之后我把控件代码做成一个winfrom程序可以正常运行,Assembly.CreateInstance方法也能正常调用请问各位大虾,什么情况下Assembly.CreateInstance方法返回空?

解决方案 »

  1.   

    可能你运行的反射用的程序集(dll)跟你程序运行的根目录不一致,找不到你那个dll报出的错误
      

  2.   

    先确认参数是否: 命名空间.类名
    如果你要反射的类型不在当前程序集中(Assembly.CreateInstance这段代码所在的程序集)
    那么需要从指定路径来创建Assembly,然后再反射
    http://msdn.microsoft.com/zh-cn/library/system.reflection.assembly.load(v=vs.80).aspx
    也可以用
    Activator.CreateInstanceFrom 
      

  3.   

    我的方法如下(以System.Windows.Forms.Form 為例):string typeName = "System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
    Type type = Type.GetType(typeName);
    object obj = Activator.CreateInstance(type);如果 type 是 null 的話,表示 typeName 是錯誤的,不然不會 null。如果 source 是 dll file 的話,如下:Assembly assembly = Assembly.LoadFile("test.dll");            
    assembly.CreateInstance("AssemblyQualifiedName");
      

  4.   

    System.Windows.Forms.Form, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
    这是程序集的强类型签名好不,是Assembly的信息,而不是某个Type的完全限定名
    麻烦你点开我上面那两个链接进去看看就知道了
      

  5.   

    http://blog.sina.com.cn/s/blog_61352f210100fgzc.html
    去了解了解