我有两个项目,我想实现这样的功能,一个项目A里面都是DLL,另一个项目B则是实时监控这个项目的DLL类库里面类的变化。有新增的类或者减少的类。A项目生成的DLL一刷新。B项目就可以刷新DLL列表并获得A项目里面类的信息。我使用 Assembly.LoadFrom来加载A生成DLL。但是一旦加载后。A项目就无法在生成新的DLL。因为这个DLL正被B项目占用,这个问题怎么解决。

解决方案 »

  1.   

    B项目读取完立刻释放...不就是反射 A.dll 里所有类么?反射完就不用一直占用了。B项目是通过 SystemFileWatch 判断 A.dll 是否更新?
      

  2.   

    一般来说,dll可以被多个exe共享,不应该有楼主的问题,如果真有这个问题,可把dll复制到另一个目录下,让B扫描这个目录,而不是直接扫描A的输出,
      

  3.   

    把DLL复制走+1
    另外由于DLL加载后只能通过卸载AppDomain来卸载,所以新开个AppDomain来处理比较好。
      

  4.   

    复制也有问题吧,如果指定复制到同一个目录,还会遇到同样的问题。还是unload比较好点.dll只能通过AppDomain来卸载
    AppDomain newDomainName = AppDomain.CreateDomain("newDomainName");try{  Assembly testLibrary = newDomainName.Load(LibraryName);  }finally{  AppDomain.Unload(newDomainName);}代码来自
    http://www.codeproject.com/Articles/18556/To-Unload-a-Running-Dll