首页 > 其他 > 详细

C#动态编译

时间:2014-03-17 11:20:31      阅读:515      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
//第一步:添加引用
using System.Reflection; 
using Microsoft.CSharp; 
using System.CodeDom.Compiler;
//第二步:创建需要编译的代码
string MyCodeString=@" 
public class MyTest
{
    public static string GetTestString()
    {
        string MyStr = ""This is a Dynamic Compiler Demo!"";
        return MyStr; 
    } 
}";
//第三步:实现动态编译
CompilerParameters compilerParams = new CompilerParameters(); 
///编译器选项设置
compilerParams.CompilerOptions = "/target:library /optimize"; 
///编译时在内存输出
compilerParams.GenerateInMemory = true; 
///生成调试信息
compilerParams.IncludeDebugInformation = false; 
///添加相关的引用
compilerParams.ReferencedAssemblies.Add("mscorlib.dll"); 
compilerParams.ReferencedAssemblies.Add("System.dll");
ICodeCompiler compiler = new CSharpCodeProvider().CreateCompiler(); 
///编译
CompilerResults results = compiler.CompileAssemblyFromSource(compilerParams,MyCodeString);
//第四步:输出编译结果
///创建程序集
Assembly asm = results.CompiledAssembly; 
///获取编译后的类型
object objMyTestClass = asm.CreateInstance("MyTest");
Type MyTestClassType=objMyTestClass.GetType(); 
///输出结果
Console.WriteLine(MyTestClassType.GetMethod("GetTestString").Invoke(objMyTestClass,null)); 
Console.ReadLine();
//至此,一个简单的动态编译程序就完了,我们看到输出的结果为:
This is a Dynamic Compiler Demo!



//完整的程序清单: using System; using System.Reflection; using Microsoft.CSharp; using System.CodeDom.Compiler; public class MyDynamicCompiler { public static void Main() { ///需要编译的字符串 string MyCodeString=@" public class MyTest { public static string GetTestString() { string MyStr = ""This is a Dynamic Compiler Demo!""; return MyStr; } }"; CompilerParameters compilerParams = new CompilerParameters(); ///编译器选项设置 compilerParams.CompilerOptions = "/target:library /optimize"; ///编译时在内存输出 compilerParams.GenerateInMemory = true; ///生成调试信息 compilerParams.IncludeDebugInformation = false; ///添加相关的引用 compilerParams.ReferencedAssemblies.Add("mscorlib.dll"); compilerParams.ReferencedAssemblies.Add("System.dll"); ICodeCompiler compiler = new CSharpCodeProvider().CreateCompiler(); ///编译 CompilerResults results = compiler.CompileAssemblyFromSource(compilerParams,MyCodeString); ///创建程序集 Assembly asm = results.CompiledAssembly; ///获取编译后的类型 object objMyTestClass = asm.CreateInstance("MyTest"); Type MyTestClassType=objMyTestClass.GetType(); ///输出结果 Console.WriteLine(MyTestClassType.GetMethod("GetTestString").Invoke(objMyTestClass,null)); Console.ReadLine(); } }
bubuko.com,布布扣

C#动态编译,布布扣,bubuko.com

C#动态编译

原文:http://www.cnblogs.com/bcodesoft/p/3604289.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!