您的位置:首页 > 编程语言 > C#

C# 动态解析编译程序(内存)

2012-09-05 07:15 260 查看
//获取命令内容;
string _strCommand = DBCommon.GetAssembleValue((sender as ToolStripMenuItem).Tag.ToString(), 5);
//编译器初始化
ICodeCompiler comp = (new CSharpCodeProvider().CreateCompiler());
//编译器参数初始化
CompilerParameters cp = new CompilerParameters();
//加载使用的动态库参数
cp.ReferencedAssemblies.Add("system.dll");
cp.ReferencedAssemblies.Add("system.data.dll");
cp.ReferencedAssemblies.Add("system.xml.dll");
//不生成可执行程序文件
cp.GenerateExecutable = false;
//是否在内存中输出
cp.GenerateInMemory = true;
//字符串生成
StringBuilder code = new StringBuilder();
//加入引用单元
code.Append("using System; \n");
code.Append("using System.Data; \n");
code.Append("using System.Data.SqlClient; \n");
code.Append("using System.Xml; \n");
code.Append("namespace Smart \n");
code.Append("{ \n");
code.Append(" public class _SmartVisualMachine \n");
code.Append(" { \n");
code.Append("    public static void ExecuteVM() \n");
code.Append("     { \n");
code.Append("        " + _strCommand + " \n");
code.Append("     } \n");
code.Append(" } \n");
code.Append("} \n");
//编译提交
CompilerResults cr = comp.CompileAssemblyFromSource(cp, code.ToString());
//判断是否编译出错。
if (cr.Errors.HasErrors)
{
StringBuilder error = new StringBuilder();
error.Append("动态编译出错信息: ");
foreach (CompilerError err in cr.Errors)
{
error.AppendFormat("{0}\n", err.ErrorText);
}
MsgBox.ErrorMsg("动态编译", error.ToString());
}
//获取已编译程序集
Assembly assembly = cr.CompiledAssembly;
//获取实例
object _Compiled = assembly.CreateInstance("Smart._SmartVisualMachine");
//返回编译后的方法。
MethodInfo mi = _Compiled.GetType().GetMethod("ExecuteVM");
//调用函数
mi.Invoke(_Compiled, null);


好像很多没有引用到~ 只是基本的单元~ 对Dll集不太了解~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: