关于c#:将DLL加载到单独的AppDomain中

关于c#:将DLL加载到单独的AppDomain中

Loading DLLs into a separate AppDomain

我想动态加载一个或多个DLL,以便它们以与主应用程序不同的安全性或基本路径运行。 如何将这些DLL加载到单独的AppDomain中并从中实例化对象?


进一步来说

1
2
3
4
5
6
AppDomain domain = AppDomain.CreateDomain("New domain name");
//Do other things to the domain like set the security policy

string pathToDll = @"C:\myDll.dll"; //Full path to dll you want to load
Type t = typeof(TypeIWantToLoad);
TypeIWantToLoad myObject = (TypeIWantToLoad)domain.CreateInstanceFromAndUnwrap(pathToDll, t.FullName);

如果一切正常(没有引发异常),您现在将TypeIWantToLoad实例加载到新域中。您拥有的实例实际上是一个代理(因为实际对象位于新域中),但是您可以像使用普通对象一样使用它。

注意:据我所知,TypeIWantToLoad必须从MarshalByRefObject继承。


如果您的目标是3.5,则可以利用新的托管可扩展性框架来为您处理所有繁重的工作。


您可以使用AppDomain.CreateInstance方法来执行此操作。您需要调用ObjectHandle的Unwrap方法,该方法将返回以获取实际对象。


如前所述,使用AppDomain.CreateDomain创建一个新的应用程序域。然后,您可以使用Load方法将程序集加载到其中,甚至可以使用ExecuteAssembly方法执行程序集。您可以使用GetAssemblies查看程序集是否已经加载。也要注意,一旦装配体被加载,就无法卸载。您将需要卸载域。


使用AppDomain.Create(...)创建一个新的Appdomain。
创建AppDomain后,将DLL加载到该AppDomain中。

查看Appdomain使用Create *拥有的所有方法。有某些东西,例如CreateInstanceAndUnwrap等。


推荐阅读

    linux运行命令查看?

    linux运行命令查看?,系统,信息,状态,命令,名称,情况,地址,软件,进程,第一,lin

    linux加载库的命令?

    linux加载库的命令?,系统,地址,信息,设备,标准,服务,命令,名字,工具,首页,lin

    脚本linux上运行命令?

    脚本linux上运行命令?,工具,代码,时间,密码,系统,环境,名字,位置,第三,下来,t

    linux中路径修改命令?

    linux中路径修改命令?,系统,命令,首次,工作,名称,目录,文件,环境变量,路径,

    linux怎么看路径命令?

    linux怎么看路径命令?,数据,工作,系统,信息,时间,命令,文件,目录,路径,缩写,

    linux命令行路径补全?

    linux命令行路径补全?,系统,名称,软件,情况,命令,工具,智能,信息,不了,终端,l

    linux运行命令的脚本?

    linux运行命令的脚本?,系统,服务,工具,脚本,意外,技术,分析,文件,方法,命令,s

    linux加载驱动命令6?

    linux加载驱动命令6?,信息,名称,设备,系统,电脑,软件,材料,下来,命令,权限,li

    linux加载过滤命令?

    linux加载过滤命令?,数据,系统,工具,标准,官网,灵活,最新,命令,文件,文件名,l

    linux隐藏命令行路径?

    linux隐藏命令行路径?,系统,工作,信息,地址,名称,命令,标准,目录,文件夹,文

    linux运行脚本的命令?

    linux运行脚本的命令?,系统,工具,代码,服务,脚本,状态,密码,环境,位置,暂停,l

    linux路径命令符号?

    linux路径命令符号?,系统,标准,信息,数据,实时,状态,名字,环境,概念,代码,lin

    linux命令行运行中断?

    linux命令行运行中断?,连续,工作,系统,信息,程序,命令,设备,工具,网络,情况,L

    vim运行linux命令?

    vim运行linux命令?,系统,工作,信息,地址,命令,标准,时间,情况,工具,基础,linu

    linux下并行运行命令?

    linux下并行运行命令?,系统,服务,工作,命令,环境,网络,暂停,文件,脚本,参数,l

    jar运行命令linux?

    jar运行命令linux?,项目,系统,平台,工具,上期,命令,选项,日志,文件名,目录,Li

    jar运行命令linux?

    jar运行命令linux?,项目,系统,平台,工具,上期,命令,选项,日志,文件名,目录,Li

    linux下并行运行命令?

    linux下并行运行命令?,系统,服务,工作,命令,环境,网络,暂停,文件,脚本,参数,l

    linux命令行后台运行?

    linux命令行后台运行?,服务,状态,标准,暂停,命令,后台,连续,地方,工作,方法,l