zoukankan      html  css  js  c++  java
  • C#实现动态编译代码

    /*------------------------------------------------------------------------------
     *  Copyright (C) 2013 
     *  版权所有。
     *  
     *  文件名:     Compile.cs
     *  功能說明:   
     *
     *  創建人:    it_Eric
     *  創建時間:   2013/10/25 16:19:52
     *   
     *  修改人:    
     *  修改說明:    
     * 
    *-----------------------------------------------------------------------------*/
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.CodeDom.Compiler;
    using Microsoft.CSharp;
    using System.IO;
    using System.Reflection;
    
    namespace TestDemo
    {
        public  class Compile
        {
            private string prefix = "using System;" +
                "public static class Driver" +
                "{" +
                   "public static void Run()" +
                   "{";
            private string postfix =
                    "}" +
                 "}";
            public string CompileAndRun(string input, out bool hasError)
            {
                hasError = false;
                string returnData = null;
    
                CompilerResults results = null;
                using (var provider = new CSharpCodeProvider())
                {
                    var options = new CompilerParameters();
                    options.GenerateInMemory = true;
                    var sb = new StringBuilder();
                    sb.Append(prefix);
                    sb.Append(input);
                    sb.Append(postfix);
                    results = provider.CompileAssemblyFromSource(options, sb.ToString());
                }
                if (results.Errors.HasErrors)
                {
                    hasError = true;
                    var errorMessage = new StringBuilder();
                    foreach (CompilerError error in results.Errors)
                    {
                        errorMessage.AppendFormat("{0}{1}", error.Line, error.ErrorText);
                        returnData = errorMessage.ToString();
                    }
    
                }
                else
                {
                    TextWriter temp = Console.Out;
                    var writer = new StringWriter();
                    Console.SetOut(writer);
                    Type drivertype = results.CompiledAssembly.GetType("Driver");
                    drivertype.InvokeMember("Run", System.Reflection.BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.Public, null, null, null);
    
                    Console.SetOut(temp);
                    returnData = writer.ToString();
    
                }
                return returnData;
            }
                    
    
    
        }
    }
  • 相关阅读:
    相对定位和绝对定位
    一切重新开始
    Oracle Profile 使用
    使用javamail发送邮件错误:550 5.7.1 Unable to relay
    gvim 备份文件去除 配置
    解决Maven中OutOfMemory错误
    sqlplus启动后的环境SQLPATH的设置
    ORA-30004 错误处理
    oracle 锁表查询及解决、表字段查询
    如何进行软件架构设计
  • 原文地址:https://www.cnblogs.com/anbylau2130/p/3388184.html
Copyright © 2011-2022 走看看