一个动态编译的简单例子
2010-07-22 16:57
344 查看
using System;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
using System.Reflection;
public class Example
{
static void Main()
{
CSharpCodeProvider provider = new CSharpCodeProvider();
System.CodeDom.Compiler.ICodeCompiler compiler = provider.CreateCompiler();
CompilerParameters parameter = new CompilerParameters();
parameter.ReferencedAssemblies.Add("System.dll");
parameter.GenerateExecutable = false;
parameter.GenerateInMemory = true;
string strCode = GenerateCode("0", "1", ">");
CompilerResults result = compiler.CompileAssemblyFromSource(parameter, strCode);
if (result.Errors.HasErrors)
{
foreach (CompilerError err in result.Errors)
{
Console.WriteLine(err.ErrorText);
}
//foreach (string str in result.Output)
//{
// Console.WriteLine(str);
//}
}
else
{
Assembly assembly = result.CompiledAssembly;
Type AType = assembly.GetType("MyNameSpace.MyClass");
MethodInfo method = AType.GetMethod("MyFunc");
Console.WriteLine(method.Invoke(null, null));
}
Console.Read();
}
static string GenerateCode(string lpara, string rparam, string op)
{
return "using System; namespace MyNameSpace{ public class MyClass{ public static object MyFunc(){ return "+ lpara + op + rparam +" }}}";
}
}
using Microsoft.CSharp;
using System.CodeDom.Compiler;
using System.Reflection;
public class Example
{
static void Main()
{
CSharpCodeProvider provider = new CSharpCodeProvider();
System.CodeDom.Compiler.ICodeCompiler compiler = provider.CreateCompiler();
CompilerParameters parameter = new CompilerParameters();
parameter.ReferencedAssemblies.Add("System.dll");
parameter.GenerateExecutable = false;
parameter.GenerateInMemory = true;
string strCode = GenerateCode("0", "1", ">");
CompilerResults result = compiler.CompileAssemblyFromSource(parameter, strCode);
if (result.Errors.HasErrors)
{
foreach (CompilerError err in result.Errors)
{
Console.WriteLine(err.ErrorText);
}
//foreach (string str in result.Output)
//{
// Console.WriteLine(str);
//}
}
else
{
Assembly assembly = result.CompiledAssembly;
Type AType = assembly.GetType("MyNameSpace.MyClass");
MethodInfo method = AType.GetMethod("MyFunc");
Console.WriteLine(method.Invoke(null, null));
}
Console.Read();
}
static string GenerateCode(string lpara, string rparam, string op)
{
return "using System; namespace MyNameSpace{ public class MyClass{ public static object MyFunc(){ return "+ lpara + op + rparam +" }}}";
}
}
相关文章推荐
- Java动态编译一个简单的例子(我转载的,但是经过修定,可以在Eclipse下运行)
- (转贴)一个C#动态编译的小例子
- (论坛答疑点滴)一个动态编译的例子
- vs2005中动态i链接库DLL的一个简单例子
- 一个简单的动态编译器,支持C#和VB.NET。当你想测试一些简单的代码的时候可以使用。
- 使用servlet开发动态wap的一个简单例子
- 一个简单的jQuery例子,动态添加表格和删除
- 一个简单打开D盘所有文件夹和文件的例子以及动态创建双击事件
- 通过freemarker生成一个超简单的动态表单例子
- 一个简单的例子演示:模仿微博里面的通过浏览器的滚动条来动态加载数据
- binbinyang---GreenDao 3.0配置以及简单一个例子,完成增删改查,有动态图
- java动态代理--一个简单的例子
- Google PB协议学习记录--一个简单的例子--如何编译.proto文件为.java文件
- 简单利用CodeDom动态编译的例子
- Xerces-C++编译安装及一个简单例子
- 一个简单的例子模拟JDK动态代理
- Android最简单的基于FFmpeg的例子(三)---编译FFmpeg成一个SO库