使用 C# 动态编译代码和执行的代码
使用 C# 动态编译代码和执行的代码
发布时间:2016-12-28 来源:查字典编辑
摘要:复制代码代码如下:/**使用C#动态编译代码和执行*作者:yaob*/staticvoidMain(string[]args){//编译器C...

复制代码 代码如下:

/*

* 使用 C# 动态编译代码和执行

* 作者: yaob

*/

static void Main(string[] args)

{

// 编译器

CodeDomProvider cdp = CodeDomProvider.CreateProvider("C#");

// 编译器的参数

CompilerParameters cp = new CompilerParameters();

cp.ReferencedAssemblies.Add("System.dll");

cp.GenerateExecutable = false;

cp.GenerateInMemory = true;

// 编译结果

CompilerResults cr = cdp.CompileAssemblyFromSource(cp, HelloWorld());

if (cr.Errors.HasErrors) Console.WriteLine("编译出错!");

else

{

// 编译后的程序集

Assembly ass = cr.CompiledAssembly;

// 得到HelloWorld类中的SayHello方法

Type type = ass.GetType("HelloWorld.HelloWorld");

MethodInfo mi = type.GetMethod("SayHello");

// 执行

mi.Invoke(null, null);

}

}

// 动态构建的代码

static string HelloWorld()

{

StringBuilder sbCode = new StringBuilder();

sbCode.AppendLine("using System;");

sbCode.AppendLine("namespace HelloWorld");

sbCode.AppendLine("{");

sbCode.AppendLine(" class HelloWorld");

sbCode.AppendLine(" {");

sbCode.AppendLine(" public static void SayHello()");

sbCode.AppendLine(" {");

sbCode.AppendLine(" Console.WriteLine("Hello~ World~!");");

sbCode.AppendLine(" }");

sbCode.AppendLine(" }");

sbCode.AppendLine("}");

return sbCode.ToString();

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C#教程学习
热门C#教程学习
编程开发子分类