我要读取不存放在bin的debug下的dll,如何读取。我已尝试用loadfrom、loadfile来读取动态加载的dll文件,假如我的debug下面有Test.dll文件的话,然后我调用其他文件夹比如F:\dll下面的这个Test.dll,使用路径F:\dll\Test.dll调用,在客户端能使用Activator.GetObject调用该dll里的类。但是我把debug下面的这个Test.dll删除掉,再assembly.Loadfrom(@“F:\dll\Test.dll”),提示:
未能加载文件或程序集“Test, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件。 

解决方案 »

  1.   

    建议使用不同名字和使用强签名,并且将dll增加GAC,并且引用需要的dll,怎样使用都不会出错了。my blog
    http://ufo-crackerx.blog.163.com/
      

  2.   

    我需要的是加载与项目独立的dll,引用的话是不可能的,我要做到的是在web上上传dll,然后windows service能通过上传信息动态加载dll,如果引用的话,难道我每上传一个dll,项目又重新生成一次?
      

  3.   

    上传的dll就不能增加到GAC? 难道用一次就删除这个dll? 难道是c++的dll? 难道是com形式的dll?
      

  4.   

    我上传的dll设想是放在dll文件夹下面的一个按时间版本创建的文件夹里面的,然后在windows service里每个dll文件都AppDomain一个程序域,在这个域里面动态,TcpChannel这个dll,在客户端调用它的接口,使用时,用Activator.GetObject生成代理,调用dll的方法。如果是全部dll都放到bin下的话,就有一个问题,同一个dll的不同版本会覆盖掉,而我要的是用新创建的文件夹来体现版本号,并根据xml里面保存的信息动态加载dll。
    现在的问题是,假如我将dll放到我新创建的文件夹里面,windows service启动没问题,测试显示这个文件夹里的dll正被使用中,但是我在客户端已他的接口生成代理:object iTest = (ITest)(Activator.GetObject(typeof(ITest), "tcp://localhost:8887/Test"));调用方法提示找不到文件。