C# 代码编译器 及 编译器实例
2017-06-14 00:00
232 查看
// 备注:若返回值是字符串类型 则 需要 转义,不然 代码编译出错
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.CSharp;
using System.Text;
using System.Reflection;
namespace CodeCompiler_Demo
{
public class Class
{
public static object GetObject(string strGreet)
{
CodeDomProvider codeProvider = CodeDomProvider.CreateProvider("CSharp");
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.ReferencedAssemblies.Add("System.dll");
parameters.GenerateExecutable = false;
parameters.GenerateInMemory = true;
string sourceCode = string.Empty;
StringBuilder sb = new StringBuilder();
sb.Append("using System;");
sb.Append(Environment.NewLine);
sb.Append("namespace CodeCompiler_Demo");
sb.Append(Environment.NewLine);
sb.Append("{");
sb.Append(Environment.NewLine);
sb.Append(" public class Greet");
sb.Append(Environment.NewLine);
sb.Append(" {");
sb.Append(Environment.NewLine);
sb.Append(" public string GetGreet()");
sb.Append(Environment.NewLine);
sb.Append(" {");
sb.Append(Environment.NewLine);
sb.Append(" return \"" + strGreet + "\";");
sb.Append(Environment.NewLine);
sb.Append(" }");
sb.Append(Environment.NewLine);
sb.Append(" }");
sb.Append(Environment.NewLine);
sb.Append("}");
sourceCode = sb.ToString();
CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, sourceCode);
object obj = null;
if (!results.Errors.HasErrors)
{
object entity = results.CompiledAssembly.CreateInstance("CodeCompiler_Demo.Greet");
MethodInfo mi = entity.GetType().GetMethod("GetGreet");
obj = mi.Invoke(entity, null);
}
return obj;
}
public static object GetEntity()
{
// 1.CSharpCodePrivoder
CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();
// 2.ICodeComplier
ICodeCompiler objICodeCompiler = objCSharpCodePrivoder.CreateCompiler();
// 3.CompilerParameters
CompilerParameters objCompilerParameters = new CompilerParameters();
objCompilerParameters.ReferencedAssemblies.Add("System.dll");
objCompilerParameters.GenerateExecutable = false;
objCompilerParameters.GenerateInMemory = true;
// 4.CompilerResults
CompilerResults cr = objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, GenerateCode());
object obj = null;
if (cr.Errors.HasErrors)
{
}
else
{
// 通过反射,调用HelloWorld的实例
Assembly objAssembly = cr.CompiledAssembly;
object objHelloWorld = objAssembly.CreateInstance("DynamicCodeGenerate.HelloWorld");
MethodInfo objMI = objHelloWorld.GetType().GetMethod("OutPut");
obj = objMI.Invoke(objHelloWorld, null);
}
return obj;
}
static string GenerateCode()
{
StringBuilder sb = new StringBuilder();
sb.Append("using System;");
sb.Append(Environment.NewLine);
sb.Append("namespace DynamicCodeGenerate");
sb.Append(Environment.NewLine);
sb.Append("{");
sb.Append(Environment.NewLine);
sb.Append(" public class HelloWorld");
sb.Append(Environment.NewLine);
sb.Append(" {");
sb.Append(Environment.NewLine);
sb.Append(" public string OutPut()");
sb.Append(Environment.NewLine);
sb.Append(" {");
sb.Append(Environment.NewLine);
sb.Append(" return \"Hello world!\"; ");
sb.Append(Environment.NewLine);
sb.Append(" }");
sb.Append(Environment.NewLine);
sb.Append(" }");
sb.Append(Environment.NewLine);
sb.Append("}");
string code = sb.ToString();
return code;
}
}
}
using System;
using System.CodeDom.Compiler;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.CSharp;
using System.Text;
using System.Reflection;
namespace CodeCompiler_Demo
{
public class Class
{
public static object GetObject(string strGreet)
{
CodeDomProvider codeProvider = CodeDomProvider.CreateProvider("CSharp");
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
parameters.ReferencedAssemblies.Add("System.dll");
parameters.GenerateExecutable = false;
parameters.GenerateInMemory = true;
string sourceCode = string.Empty;
StringBuilder sb = new StringBuilder();
sb.Append("using System;");
sb.Append(Environment.NewLine);
sb.Append("namespace CodeCompiler_Demo");
sb.Append(Environment.NewLine);
sb.Append("{");
sb.Append(Environment.NewLine);
sb.Append(" public class Greet");
sb.Append(Environment.NewLine);
sb.Append(" {");
sb.Append(Environment.NewLine);
sb.Append(" public string GetGreet()");
sb.Append(Environment.NewLine);
sb.Append(" {");
sb.Append(Environment.NewLine);
sb.Append(" return \"" + strGreet + "\";");
sb.Append(Environment.NewLine);
sb.Append(" }");
sb.Append(Environment.NewLine);
sb.Append(" }");
sb.Append(Environment.NewLine);
sb.Append("}");
sourceCode = sb.ToString();
CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, sourceCode);
object obj = null;
if (!results.Errors.HasErrors)
{
object entity = results.CompiledAssembly.CreateInstance("CodeCompiler_Demo.Greet");
MethodInfo mi = entity.GetType().GetMethod("GetGreet");
obj = mi.Invoke(entity, null);
}
return obj;
}
public static object GetEntity()
{
// 1.CSharpCodePrivoder
CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();
// 2.ICodeComplier
ICodeCompiler objICodeCompiler = objCSharpCodePrivoder.CreateCompiler();
// 3.CompilerParameters
CompilerParameters objCompilerParameters = new CompilerParameters();
objCompilerParameters.ReferencedAssemblies.Add("System.dll");
objCompilerParameters.GenerateExecutable = false;
objCompilerParameters.GenerateInMemory = true;
// 4.CompilerResults
CompilerResults cr = objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, GenerateCode());
object obj = null;
if (cr.Errors.HasErrors)
{
}
else
{
// 通过反射,调用HelloWorld的实例
Assembly objAssembly = cr.CompiledAssembly;
object objHelloWorld = objAssembly.CreateInstance("DynamicCodeGenerate.HelloWorld");
MethodInfo objMI = objHelloWorld.GetType().GetMethod("OutPut");
obj = objMI.Invoke(objHelloWorld, null);
}
return obj;
}
static string GenerateCode()
{
StringBuilder sb = new StringBuilder();
sb.Append("using System;");
sb.Append(Environment.NewLine);
sb.Append("namespace DynamicCodeGenerate");
sb.Append(Environment.NewLine);
sb.Append("{");
sb.Append(Environment.NewLine);
sb.Append(" public class HelloWorld");
sb.Append(Environment.NewLine);
sb.Append(" {");
sb.Append(Environment.NewLine);
sb.Append(" public string OutPut()");
sb.Append(Environment.NewLine);
sb.Append(" {");
sb.Append(Environment.NewLine);
sb.Append(" return \"Hello world!\"; ");
sb.Append(Environment.NewLine);
sb.Append(" }");
sb.Append(Environment.NewLine);
sb.Append(" }");
sb.Append(Environment.NewLine);
sb.Append("}");
string code = sb.ToString();
return code;
}
}
}
相关文章推荐
- VB C# 语法对比图 (代码实例)
- VB C# 语法对比图 (代码实例)
- C# 连接ACCESS数据库代码实例
- C#写的给图片加水印的实例代码
- 基于.Net平台应用程序唯一运行实例C#代码实现
- C# 编译器命令行实例
- c# 编译器优化的功劳?与泛型有关的代码的疑惑
- c#中的反射代码实例讲解(转载)
- 用C#编写的代码经C#编译器后,并非生成本地代码而是生成托管代码
- C# 执行SQL事务实例代码
- 基于.Net平台应用程序唯一运行实例C#代码实现
- c#中的反射代码实例讲解(转载)
- C#操作Excel代码实例
- 谈谈对C#委托的理解,附代码实例
- [C#]一步一步开发自己的自动代码生成工具之四:简单三层代码模板实例Model层
- 用于 Excel 的代码实例 (C#)
- [原创]走势图 实例代码(C#)
- 谈谈对C#委托的理解,附代码实例
- C#访问同类实例的私有成员代码
- C#完整执行存储过程的代码加实例