我用Assembly a = Assembly.LoadFrom(filename);方法加载的dll文件如何在不关闭程序的情况下将其卸载,即实现热插拔的功能,如今热加载我会了,就是卸载不会,求救了,谢谢!

解决方案 »

  1.   

    直接卸载程序集在.net framework1.1之前好像是不支持的
    不过可以通过卸载应用程序域的方法达到目的。
    你可以先通过AppDomain.CreateDomain(),创建一个应用程序域
    然后在这个域内加载程序集,需要的时候通过AppDomain.UnLoad()来卸载应用程序域,达到卸载程序集的目的。
      

  2.   

    楼上说的是
    应用程序域——由 AppDomain 对象来表示,为执行托管代码提供隔离、卸载和安全边界。多个应用程序域可以在一个进程中运行;但是,在应用程序域和线程之间没有一对一的关联。多个线程可以属于一个应用程序域,尽管给定的线程并不局限于一个应用程序域,但在任何给定时间,线程都在一个应用程序域中执行。应用程序域通过使用 CreateDomain 方法来创建。AppDomain 实例用于加载和执行程序集 (Assembly)。当不再使用 AppDomain 时,可以将它卸载。AppDomain 类实现一组事件,这些事件使应用程序可以在加载程序集、卸载应用程序域或引发未处理的异常时进行响应。
      

  3.   

    谢谢jkflyfox(飞狐) , Tomgus(小桥流水)兄弟,你们讲的这个我知道,我想知道的是vs2005支持否?vs2005我没用过,但愿vs2005能直接支持这个,当然最好能更细致地分析为什么.net1.1不支持的原因以及支持的利与弊,