先说说你的功能需求? 真的需要动态创建类吗?
.net 支持动态执行 代码
using System;
using System.Reflection;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
using System.Text;
/// <summary>
/// 动态执行代码
/// </summary>
public class Evaluator
{
public static bool GetWhereReturn(string conditionOne, string conditionTwo)
{
// 1.CSharpCodePrivoder 创建编译器实例访问
CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();
// 2.ICodeComplier 创建编译器的CodeDom树
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(conditionOne, conditionTwo));
//判断编译错误是否有错误,如果有直接返回false,否则通过反射读取程序集中的公用方法
if (cr.Errors.HasErrors)
{
return false;
}
else
{
// 通过反射,获取编译器编译的程序集
Assembly objAssembly = cr.CompiledAssembly;
//通过程序集创建对象
object objRun = objAssembly.CreateInstance("Run");
//调用对象中的公有方法
MethodInfo objMI = objRun.GetType().GetMethod("RunCode");
object[] ob = { conditionOne, conditionTwo };
return (bool)objMI.Invoke(objRun, ob);
}
//return false;
}
}
.net 支持动态执行 代码
using System;
using System.Reflection;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
using System.Text;
/// <summary>
/// 动态执行代码
/// </summary>
public class Evaluator
{
public static bool GetWhereReturn(string conditionOne, string conditionTwo)
{
// 1.CSharpCodePrivoder 创建编译器实例访问
CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();
// 2.ICodeComplier 创建编译器的CodeDom树
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(conditionOne, conditionTwo));
//判断编译错误是否有错误,如果有直接返回false,否则通过反射读取程序集中的公用方法
if (cr.Errors.HasErrors)
{
return false;
}
else
{
// 通过反射,获取编译器编译的程序集
Assembly objAssembly = cr.CompiledAssembly;
//通过程序集创建对象
object objRun = objAssembly.CreateInstance("Run");
//调用对象中的公有方法
MethodInfo objMI = objRun.GetType().GetMethod("RunCode");
object[] ob = { conditionOne, conditionTwo };
return (bool)objMI.Invoke(objRun, ob);
}
//return false;
}
}