C#动态编译
来源:互联网 发布:win7网络位置怎么修改 编辑:程序博客网 时间:2024/05/21 11:00
C#动态编译
摘要: 一个控制台例子, 演示了如何用 C# 动态的生成代码, 编译代码, 最后执行./** 使用 C# 动态编译代码和执行* 作者: yaob*/static void Main(string args){ // 编译器 CodeDomProvider cdp = CodeDomProvider.CreateProv ...
一个控制台例子, 演示了如何用 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# 动态编译代码和执行
* 作者: 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# 动态编译
- C#动态编译代码
- C#动态编译笔录
- 动态编译c#
- C#动态编译
- c#动态编译代码
- C#动态编译
- C# 动态编译代码
- 动态编译 C#
- C#动态编译
- C# 动态编译代码
- C#动态编译代码
- C# 动态编译
- 动态编译C#代码
- C#动态编译类
- C# 动态编译执行
- C#中动态编译应用程序
- ORACLE 存储过程 遍历查询记录
- Linux性能分析工具详解
- 利用开源程序(ImageMagick+tesseract-ocr)实现图像验证码识别
- HDOJ 1869 六度分离
- HTTP通信POST方式
- C#动态编译
- 学习笔记(二十二)
- Git历险记(一)
- 优化WebLogic 服务器性能参数
- AspNetPager 样式以及使用(漂亮)
- 线段树典型例题--poj2777
- android源码中ccache使用及原理简介
- 为什么乔布斯喜欢去日本,但从来不来中国?
- javaweb的http协议的一些讲解的复习