EJS动态加载外部程序集
十月 11, 2015 at 1:42 下午
—
Easton
在上一个版本中,我新增了importAssembly函数用于加载外部程序集,但是上一个版本遗留了一个问题,这种方式加载的外部程序集如果还引用了别的程序集会出现无法找到依赖项的错误,如下图所示:
为了解决这个问题,我抽空更新了下IDE工具,使其能正确加载importAssembly函数导入的外部程序集的依赖项,并新增了一个全局变量:__ide_version__用于获取当前IDE或Shell的版本号。
示例代码:
clear();
//获取IDE版本
console.log(__ide_version__);
//加载程序集文件
importAssembly(__script_dir__ + "lib\\TestLib.dll");
//加载命名空间
var lib = importNamespace("TestLib");
//方法一:插件内部采用Application.Run方法执行插件程序,模拟Main方法。
lib.Plugin.Run(); //运行外挂插件
//方法二:脚本代码内实例化窗口类启动插件程序。
//var TestForm = lib.TestForm;
//var frm = new TestForm();
//frm.ShowDialog();
console.log("结束");
此功能价值何在?
EJS脚本引擎是封装成程序集文件的,可以通过引用程序集在程序中加载EJS引擎并解释运行EJS代码。EJS脚本完美兼容.NET库,因此将它用在程序中可以在程序发布后无限制拓展程序。比如:可以为程序拓展外部插件,可以在线加载EJS脚本实现某些需要经常更新代码的功能而不必重新下载程序。此功能用在IDE工具可以让EJS脚本加载第三方提供的程序集,如操作硬件厂商提供的.NET版本的SDK。
在上一个版本中如何解决这个问题?
方案1:在外部程序集中使用反射的方式加载其他程序集。(不现实,很麻烦)【较差】
方案2:把依赖的程序集放入IDE根目录。(不方便管理)【一般】
方案3:在外部程序集代码中添加加载依赖项的代码(需要对反射有一定了解)【完美】。
878db99b-7359-446b-a8a6-995abf1425e5|10|4.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Posted in:
Tags: