zoukankan      html  css  js  c++  java
  • 关于c#动态加载程序集的一些注意事项

    Assembly下有LoadFile,LoadFrom等方法可以加载程序集。

    LoadFile只加载你给定路径的那个dll,LoadFrom会自动加载依赖的dll。

    如:A依赖B,LoadFile(“A”)只会加载A,不会加载B,之后运行A的方法可能会导致报错。

    LoadFrom(“A”)则会自动加载A和A的依赖,之后调用就不会报错了

    但是如果想要加载进来的程序集还能够卸载掉,就不能用这样的方法了。

    需要用到AppDomain.CreateDomain这样的sandbox型的方法,在之后,再把Create出来的这个AppDomain,Unload掉

    首先,需要继承MarshalByRefObject写一个类

    在此类中写一个Load方法

    public class Sandbox : MarshalByRefObject
    {
        public void Load(string path)
        {
            Assembly.LoadFrom(path);
        }
    }
    之后,在住程序中
    var ad = AppDomain.CreateDomain("new");
    Sandbox sandbox = (Sandbox)ad.CreateInstanceFromAndUnwrap(@"sandbox所在程序集", "命名空间.Sandbox");
    sandbox.Load(path);

    此时,主程序域中,并没有任何你刚刚加载进来的程序集信息,如果需要调用里面的方法,你同样需要通过sandbox去调用。

    所以sandbox可以增加调用的方法。只有在sandbox中,才能访问当相关的程序集信息。

    最后使用

    AppDomain.Unload(ad);
    卸载掉

  • 相关阅读:
    OMFCL 使用
    客户化 Summary 页的 Properties
    瑞星升级包下载
    观察者模式Observer
    单例模式Singleton
    java中8大排序
    向上转型和向下转型
    瀑布流的实现
    [转]降级论
    Grid的使用
  • 原文地址:https://www.cnblogs.com/czcz1024/p/4807762.html
Copyright © 2011-2022 走看看