动态执行CS代码的方法
2017-02-20 00:32:39 访问(1463) 赞(0) 踩(0)
///
/// 获得默认的DLL引用
/// ///
public static List
GetStaticListDLL()
{
List theResult = new List();
theResult.Add("System.dll");
theResult.Add("System.Web.dll");
theResult.Add("System.Data.dll");
return theResult;
}
///
/// 动态程序调用
///
///
///
///
///
///
///
///
public static object Call
(
string code,
List listDLL,
string createInstanceName,
string methodName,
bool IsStaticMethod,
object[] p
)
{
return Call(code, listDLL, false, true, createInstanceName, methodName, IsStaticMethod, p);
}
///
/// 动态程序调用
///
/// CS代码
/// 引入的DLL
/// 获取或设置一个值,该值指示是否生成可执行文件
/// 获取或设置一个值,该值指示是否在内存中生成输出
/// 类实体
/// 方法名
/// 是否静态方法
/// 参数
///
public static object Call
(
string code,
List listDLL,
bool generateExecutable,
bool generateInMemory,
string createInstanceName,
string methodName,
bool IsStaticMethod,
object[] p
)
{
// 1.CSharpCodePrivoder
// using Microsoft.CSharp
CSharpCodeProvider objCSharpCodePrivoder
=
new CSharpCodeProvider();
// 2.ICodeComplier
// using System.CodeDom.Compiler
ICodeCompiler objICodeCompiler
=
objCSharpCodePrivoder.CreateCompiler();
// 3.CompilerParameters
//
CompilerParameters objCompilerParameters
=
new CompilerParameters();
if (listDLL != null)
{
foreach (string s in listDLL)
{
objCompilerParameters.ReferencedAssemblies.Add(s);
}
}
// 获取或设置一个值,该值指示是否生成可执行文件。
objCompilerParameters.GenerateExecutable
=
generateExecutable;
// 获取或设置一个值,该值指示是否在内存中生成输出。
objCompilerParameters.GenerateInMemory
=
generateInMemory;
// 4.CompilerResults
CompilerResults cr
=
objICodeCompiler.CompileAssemblyFromSource
(
objCompilerParameters,
code
);
if (cr.Errors.HasErrors)
{
StringBuilder errorSB = new StringBuilder();
errorSB.AppendLine("代码:");
errorSB.AppendLine(code);
errorSB.AppendLine();
errorSB.AppendLine("编译错误:");
foreach (CompilerError err in cr.Errors)
{
errorSB.AppendLine(err.ErrorText);
}
throw new Exception(errorSB.ToString());
}
else
{
// 通过反射,调用的实例
Assembly objAssembly
=
cr.CompiledAssembly;
// 创建
object theInstance
=
objAssembly.CreateInstance(createInstanceName);
// 反射获得方法 //
MethodInfo methodItem
=
theInstance.GetType().GetMethod(methodName);
return methodItem.Invoke(theInstance, p);
}
}
标签:动态执行CS代码的方法 



上一条:
下一条:
相关评论
发表评论