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);
    卸载掉

  • 相关阅读:
    [转载]Centos7.x下环境搭建(一)--yum方式安装mysql5.7
    树上分治
    [SPOJ2666]QTREE4
    [SPOJ375]QTREE
    [SPOJ1825]FTOUR2
    [POJ1741]Tree
    [LG-P5350]序列
    [COCI 2014/2015 #3]KAMIONI
    [SHOI2014]神奇化合物
    [GXOI/GZOI2019]旧词
  • 原文地址:https://www.cnblogs.com/czcz1024/p/4807762.html
Copyright © 2011-2022 走看看