WW的插件结构很神奇,内部插件编译在DLL中,外部的则直接以.cs文件的形式加载,路径(C:\Program Files (x86)\NASA\World Wind 1.4\Plugins)
内部的以Assembly类来动态加载,外部的CodeDomProvider动态编译后加载!
PluginCompiler.cs文件中的方法public void Load(PluginInfo pi)
1 /// <summary> 2 /// Load a plugin 3 /// </summary> 4 public void Load(PluginInfo pi) 5 { 6 if (pi.Plugin == null) 7 { 8 // Try to find a suitable compiler 9 string extension = Path.GetExtension(pi.FullPath).ToLower(); 10 Assembly asm = null; 11 if (extension == ".dll") 12 { 13 // Load pre-compiled assembly 14 asm = Assembly.LoadFile(pi.FullPath); 15 } 16 else 17 { 18 CodeDomProvider cdp = (CodeDomProvider)codeDomProviders[extension]; 19 if (cdp == null) 20 return; 21 asm = Compile(pi, cdp); 22 } 23 24 pi.Plugin = GetPluginInterface(asm); 25 } 26 27 string pluginPath = MainApplication.DirectoryPath; 28 if (pi.FullPath != null && pi.FullPath.Length > 0) 29 pluginPath = Path.GetDirectoryName(pi.FullPath); 30 31 pi.Plugin.PluginLoad(mainApplication, pluginPath); 32 }
参考:http://msdn.microsoft.com/zh-cn/library/system.codedom.compiler.codedomprovider(v=VS.90).aspx
http://blog.csdn.net/sharpnessdotnet/article/details/1921306
http://www.cnblogs.com/wuhenke/archive/2009/12/16/1625585.html .NET运行时编译学习——CodeDomProvider、CodeCompileUnit和CODEDOM
CODEDOM学习系列:http://www.cnblogs.com/lichdr/category/12610.html
CodeDomProvider 可用于创建和检索代码生成器和代码编译器的实例。代码生成器可用于以特定的语言生成代码,而代码编译器可用于将代码编译为程序集。
CodeDomProvider 实现通常为一种编程语言提供用于生成代码和管理编译的代码生成和/或代码编译接口。Windows 软件开发工具包 (SDK) 附带的 CodeDomProvider 实现支持多种语言。这些语言包括 C#、Visual Basic、C++、J# 和 JScript。开发人员或编译器提供商可以实现 ICodeGenerator 和 ICodeCompiler 接口,并提供将 CodeDom 支持扩展到其他编程语言的 CodeDomProvider。
计算机配置文件 (Machine.config) 中的 <system.codedom> 元素 为开发人员和编译器提供商提供了一种机制,以便为其他 CodeDomProvider 实现添加配置设置。
CodeDomProvider 类提供静态方法以发现和枚举计算机上的 CodeDomProvider 实现。GetAllCompilerInfo 方法返回计算机上所有 CodeDomProvider 实现的设置。GetCompilerInfo 方法会基于编程语言名称返回特定 CodeDomProvider 实现的设置。CreateProvider 方法返回特定语言的 CodeDomProvider 实现的实例。