[WorldWindラーニング]10.プラグイン構造
7079 ワード
WWのプラグインの構造はとても不思議で、内部のプラグインはDLLの中でコンパイルして、外部のは直接です.csファイルの形式ロード、パス(C:Program Files(x 86)NASAWorld Wind 1.4Plugins)
内部はAssemblyクラスで動的にロードされ、外部のCodeDomProviderが動的にコンパイルされてロードされます!
PluginCompiler.csファイルのメソッドpublic void Load(PluginInfo pi)
参照: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実装の例を返す.
内部は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実装の例を返す.