我们使用System.CodeDom ,System.CodeDom.Compiler就可以自动生成代码,这样就能实现动态编译的效果。动态编译后,通过反射(Reflection机制),就可以运行。
构造编译器的编译参数在CompilerParameters设置:
CompilerOptions 用于设置编译器命令行参数 IncludeDebugInformation 用于指示是否在内存在生成Assembly GenerateInMemory 用于指示是否在内存在生成Assembly GenerateExecutable 用于指示生成的Assembly类型是exe还是dll OutputAssembly 用于指示生成的程序文件名(仅在GenerateInMemory为false的情况) ReferencedAssemblies 用于添加引用Assembly 例如:CompilerParameters parameter = new CompilerParameters();parameter .ReferencedAssemblies.Add("System.dll");
编译需要由指定语言的CodeDomProvider生成:
vb.net Microsoft.VisualBasic.VBCodeProvider C# Microsoft.CSharp.CSharpCodeProvider jscript Microsoft.JScript.JScriptCodeProvider J# Microsoft.VJSharp.VJSharpCodeProvider 以C#为例,要创建C#编译器,代码如下:
CodeDomProvider theProvider= (ICodeCompiler) new Microsoft.CSharp.CSharpCodeProvider();
编译源代码相当简单,只需一条语句就搞定了:
CompilerResults compilerResults = compiler.CompileAssemblyFromSource(this.theParameters, this.SourceText);
执行后,可以从compilerResults取得以下内容:
NativeCompilerReturnValue 编译结果,用于检查是否成功 Errors 编译时产生的错误和警告信息 CompiledAssembly
在接下来中我们来研究下如何使用CodeDom方式来动态生成可执行代码



