关于cs和dll文件的引用问题

whb147 2005-03-02 09:10:06
我现在遇到一个问题,
我在项目中,有一个server类,如果我以cs的形式添加到项目中,运行正常,如果我把她编译成dll,然后添加进去,运行结果就不准了,出现死循环,这是怎么回事??
测试数据是一样的 ,代码也没有改,唯一的区别就是一个是cs,一个是dll.
为什么会出现这样的错误呢?

...全文
351 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
evaELLIS 2005-03-02
  • 打赏
  • 举报
回复
因为cs文件编译之后,跟Type MyTypea = Type.GetType("myTest.Test");这句代码所在的文件在同一个dll文件里,就是同一个Assembly,所以能够找到类型不会出错。如果是dll文件,那么就是在不同的Assembly里,这样仅凭类型名字是找不到类型的(mscorlib内库除外,这是系统默认的Assembly)。
xixigongzhu 2005-03-02
  • 打赏
  • 举报
回复
上面这种方式也可以,楼主可以根据情况来确定用那种方式
xixigongzhu 2005-03-02
  • 打赏
  • 举报
回复
Assembly ass = Assembly.Load(你的dll名字);//不能有扩展名,这个文件必须和exe程序放在同一目录下
xixigongzhu 2005-03-02
  • 打赏
  • 举报
回复
为什么cs文件不会出错呢?

原因:因为cs文件编译之后,跟Type MyTypea = Type.GetType("myTest.Test");这句代码所在的文件在同一个dll文件里,就是同一个Assembly,所以能够找到类型不会出错。如果是dll文件,那么就是在不同的Assembly里,这样仅凭类型名字是找不到类型的(mscorlib内库除外,这是系统默认的Assembly)。
xixigongzhu 2005-03-02
  • 打赏
  • 举报
回复
Assembly ass = Assembly.LoadFrom(你的dll文件路径);//这个文件最好和exe程序放在同一目录下,那样这里给出名字就可以了
Type MyTypea = ass.GetType("myTest.Test");

yellowhwb 2005-03-02
  • 打赏
  • 举报
回复
你要把dll的信息写全否则,就只能得到空引用.

Type.GetType("System.Data.DataTable,System.Data,Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
yellowhwb 2005-03-02
  • 打赏
  • 举报
回复
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");
whb147 2005-03-02
  • 打赏
  • 举报
回复
现在,我找到问题的所在了,是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"); 返回为空。
这是怎么回事??
jialiang 2005-03-02
  • 打赏
  • 举报
回复
应该不会
暗石绿 2005-03-02
  • 打赏
  • 举报
回复
不可能。
你再好好检查是不是使用的是同一个方法
whb147 2005-03-02
  • 打赏
  • 举报
回复
问题已经解决,是我的静态变量问题
谢谢大家
whb147 2005-03-02
  • 打赏
  • 举报
回复
我用
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的话,每次都能发过去,这又是什么回事??
谢谢

111,077

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧