现在,我找到问题的所在了,是Type.GetType()出错了
找不到东西
我有一个Test类,如果,Server跟Test在一起,就没有问题
可以直接用
Type MyTypea = Type.GetType("myTest.Test");
Object obj=Activator.CreateInstance(MyTypea);
MethodInfo myAdd = MyTypea.GetMethod("add");
Console.Write("\nSecond method - " + MyTypea.FullName +" returns " + myAdd.Invoke(obj, aa));来找到myTest.Test,现在是,如果我Server提出来,编译成dll,那么他就找不到了
Type MyTypea = Type.GetType("myTest.Test"); 返回为空。
这是怎么回事??

解决方案 »

  1.   

    Type t = Type.GetType(“System.String”);
        需要注意的是,前面我们讲到了命名空间和装配件的关系,要查找一个类,必须指定它所在的装配件,或者在已经获得的Assembly实例上面调用GetType。
        本装配件中类型可以只写类型名称,另一个例外是mscorlib.dll,这个装配件中声明的类型也可以省略装配件名称(.Net装配件编译的时候,默认都引用了mscorlib.dll,除非在编译的时候明确指定不引用它),比如:
         System.String是在mscorlib.dll中声明的,上面的Type t = Type.GetType(“System.String”)是正确的
         System.Data.DataTable是在System.Data.dll中声明的,那么:
    Type.GetType(“System.Data.DataTable”)就只能得到空引用。
         必须:
    Type t = Type.GetType("System.Data.DataTable,System.Data,Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
      

  2.   

    你要把dll的信息写全否则,就只能得到空引用.Type.GetType("System.Data.DataTable,System.Data,Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
      

  3.   

    Assembly ass = Assembly.LoadFrom(你的dll文件路径);//这个文件最好和exe程序放在同一目录下,那样这里给出名字就可以了
    Type MyTypea = ass.GetType("myTest.Test");
      

  4.   

    为什么cs文件不会出错呢?原因:因为cs文件编译之后,跟Type MyTypea = Type.GetType("myTest.Test");这句代码所在的文件在同一个dll文件里,就是同一个Assembly,所以能够找到类型不会出错。如果是dll文件,那么就是在不同的Assembly里,这样仅凭类型名字是找不到类型的(mscorlib内库除外,这是系统默认的Assembly)。
      

  5.   

    Assembly ass = Assembly.Load(你的dll名字);//不能有扩展名,这个文件必须和exe程序放在同一目录下
      

  6.   

    因为cs文件编译之后,跟Type MyTypea = Type.GetType("myTest.Test");这句代码所在的文件在同一个dll文件里,就是同一个Assembly,所以能够找到类型不会出错。如果是dll文件,那么就是在不同的Assembly里,这样仅凭类型名字是找不到类型的(mscorlib内库除外,这是系统默认的Assembly)。
      

  7.   

    我用
    FileInfo file=new FileInfo(Path.Combine(Application.StartupPath,"myTest.dll"));
    if(file.Exists)
    {
    try
    {
    Assembly ass=Assembly.LoadFrom(file.FullName);
    Type MyTypea = ass.GetType(className);
    Object obj=Activator.CreateInstance(MyTypea,classPara); MethodInfo myAdd = MyTypea.GetMethod(methodName);
    myAdd.Invoke(obj, methodPara).ToString();
    }
    catch(Exception e)
    {
    //
    }
    }
    已经解决上面的问题了。
    ------------------------------------------------------------------------------
    现在又遇到一个问题:
    我在客户端Client用一个循环向Server发数据,一个循环50次,第一次通信,能够全部发过去,
    连接没有断开的,我继续点发送,结果第二次只能发送3-5条数据过去,
    如果不用dll,而是用cs的话,每次都能发过去,这又是什么回事??
    谢谢