using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.Reflection;
namespace Ant.Service.Utilities
{
//public class DTCallClass
//{
// //调用方法:
// //var ret = string.Empty;
// //var obj =CommOperater.ExecuteCode("1 == 2");
// //ret = obj == null ? "返回了null" : obj.ToString();
// #region 执行静态代码
// ///
// /// 执行代码,返回结果(默认引用了System.dll、System.Data.dll、System.Xml.dll、System.Web.dll 4个程序集)
// ///
// /// 代码
// /// 要引用的程序集
// ///
// public static object ExecuteCode(string code, string[] arrReferencedAssemblies)
// {
// CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();
// CompilerParameters objCompilerParameters = new CompilerParameters();
// objCompilerParameters.ReferencedAssemblies.Add("System.dll"); //引用dll
// objCompilerParameters.ReferencedAssemblies.Add("System.Data.dll"); //引用dll
// objCompilerParameters.ReferencedAssemblies.Add("System.Xml.dll"); //引用dll
// objCompilerParameters.ReferencedAssemblies.Add("System.Web.dll"); //引用dll
// if (arrReferencedAssemblies != null)
// foreach (string item in arrReferencedAssemblies)
// objCompilerParameters.ReferencedAssemblies.Add(item);
// objCompilerParameters.GenerateExecutable = false;
// objCompilerParameters.GenerateInMemory = true;
// CompilerResults cr = (objCSharpCodePrivoder.CompileAssemblyFromSource(objCompilerParameters,
// new[] { GenerateCode(code) }));
// if (cr.Errors.HasErrors)
// {
// StringBuilder l_err = new StringBuilder("编译错误:");
// foreach (CompilerError err in cr.Errors)
// {
// l_err.AppendLine(err.ErrorText);
// }
// return l_err.ToString();
// }
// // 通过反射,调用HelloWorld的实例
// Assembly objAssembly = cr.CompiledAssembly;
// object objHelloWorld = objAssembly.CreateInstance("CommonOtherDynamicCodeGenerate.CommonOtherDynamicCodeGenerateClass");
// MethodInfo objMI = objHelloWorld.GetType().GetMethod("OutPut");
// // 调用执行
// return objMI.Invoke(objHelloWorld, null);
// }
// ///
// /// 执行代码,返回结果(默认引用了System.dll、System.Data.dll、System.Xml.dll 3个程序集)
// ///
// ///
// ///
// public static object ExecuteCode(string code)
// {
// return ExecuteCode(code, null);
// }
// private static string GenerateCode(string code)
// {
// StringBuilder sb = new StringBuilder();
// sb.Append("using System;");
// sb.Append(Environment.NewLine);
// sb.Append("using System.Text;");
// sb.Append(Environment.NewLine);
// sb.Append("using System.IO;");
// sb.Append(Environment.NewLine);
// sb.Append("using System.Data;");
// sb.Append(Environment.NewLine);
// sb.Append("using System.Xml;");
// sb.Append(Environment.NewLine);
// sb.Append("using System.Web;");
// sb.Append(Environment.NewLine);
// sb.Append("using System.Collections;");
// sb.Append(Environment.NewLine);
// sb.Append("using System.Collections.Generic;");
// sb.Append(Environment.NewLine);
// sb.Append("namespace CommonOtherDynamicCodeGenerate");
// sb.Append(Environment.NewLine);
// sb.Append("{");
// sb.Append(Environment.NewLine);
// sb.Append(" public class CommonOtherDynamicCodeGenerateClass");
// sb.Append(Environment.NewLine);
// sb.Append(" {");
// sb.Append(Environment.NewLine);
// sb.Append(" public object OutPut()");
// sb.Append(Environment.NewLine);
// sb.Append(" {");
// sb.Append(Environment.NewLine);
// sb.Append(" return " + code + ";");
// sb.Append(Environment.NewLine);
// sb.Append(" }");
// sb.Append(Environment.NewLine);
// sb.Append(" }");
// sb.Append(Environment.NewLine);
// sb.Append("}");
// return sb.ToString();
// }
// #endregion
//}
}