博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于c#动态加载程序集的一些注意事项
阅读量:6333 次
发布时间:2019-06-22

本文共 787 字,大约阅读时间需要 2 分钟。

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

转载于:https://www.cnblogs.com/czcz1024/p/4807762.html

你可能感兴趣的文章
linux磁盘配额
查看>>
NFS文件共享服务器的搭建
查看>>
%r 和 %s 该用哪个?
查看>>
小公司职场不是“切糕”
查看>>
play工程部署到云服务器
查看>>
ListView 取消点击效果
查看>>
降级论
查看>>
wampServer连接oracle
查看>>
CentOS 6.5下编译安装新版LNMP
查看>>
Android Picasso
查看>>
top命令
查看>>
javascript的作用域
查看>>
新形势下初创B2B行业网站如何经营
查看>>
初心大陆-----python宝典 第五章之列表
查看>>
java基础学习2
查看>>
sysbench使用笔记
查看>>
有关电子商务信息的介绍
查看>>
NFC·(近距离无线通讯技术)
查看>>
多线程基础(三)NSThread基础
查看>>
PHP的学习--Traits新特性
查看>>