在.NET中实现脚本引擎过程简述及心得

近期在维护公司一个项目时,需要用到.NET动态编译脚本引擎功能。于是在搜索网上相关资料及项目中已有代码的基础上,对.NET脚本引擎实现过程进行了分析与尝试。

 

概念:程序域是一个在进程中用于将一组程序集与另一组程序集进行隔离的概念,可理解为程序集逻辑容器。微软为创建程序域、将程序集添加到程序域分别提供了:AppDomain.CreateDomain、appDomain.CreateInstanceFromAndUnwrap等方法。但是在程序域卸载程序集上,却没有提供方法。因此,若要实现加载动态脚本、运行脚本、卸载脚本,所需要的步骤应该为:

 

1。创建脚本,并编译为程序集;创建程序域。

2。将编译成功的程序集加载到新建的程序域中,并调用程序集中的相关方法。

3。由于微软没有提供直接卸载程序域的方法,因此在调用脚本运行完成后,必须卸载该程序域,以此卸载其所包含的程序集。

 

注意事项:

 

1。如果在编写的脚本中需要引用到某某自定义的程序集。似乎可以通过类似于this.AddReference("System.dll");语句进行添加。但是必须注意的是,网站型的项目中相关语句必须写程序集的绝对路径。具体路径可在程序运行时获取并传入。

2。动态脚本运行后返回对象的类型定义必须继承MarshalByRefObject。

3。调用的动态脚本中的方法必须是static型的。

 

posted @ 2010-06-10 08:49  Shapley  阅读(562)  评论(0编辑  收藏  举报