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

  • 相关阅读:
    同步/异步/阻塞/非阻塞
    java io异步
    java nio知识点总结
    使用BBED恢复数据文件头
    Codeforces Round #257 (Div. 2) B Jzzhu and Sequences
    Hibernate @Embeddable注解
    2388 Who's in the Middle(简单排序)
    CorePlot学习
    九度OJ 1179 阶乘(模拟)
    NSHashTable 和 NSMapTable学习
  • 原文地址:https://www.cnblogs.com/czcz1024/p/4807762.html
Copyright © 2011-2022 走看看