• 一个简易的C# 代码编译测试工具


    TextEditor editor = new TextEditor();
    public XtraFormCodeExector()
    {
        InitializeComponent();
        editor.Text= "using System;
    "+
                        "namespace HelloWorld
    " +
                        "{
    " +
                            "	class Program
    " +
                            "	{
    " +
                                "		public static void Main()
    " +
                                "		{
    " +
                                    "			Console.WriteLine("aa");
    " +
                                "		}
    " +
                            "	}
    " +
                        "}
    ";
    
        //展示行号
        editor.ShowLineNumbers = true;
        editor.Padding = new System.Windows.Thickness(20);
        //字体
        editor.FontFamily = new System.Windows.Media.FontFamily("Console");
        editor.FontSize = 14;
        //C#语法高亮
        editor.SyntaxHighlighting = HighlightingManager.Instance.GetDefinition("C#");
        //将editor作为elemetnHost的组件
        elementHost1.Child = editor;
        System.Console.SetOut(new TextBoxWriter(textBoxOutPut));
    }
    
    private void simpleButtonExec_Click(object sender, EventArgs e)
    {
        // 编译器
        CodeDomProvider cdp = CodeDomProvider.CreateProvider("C#");
    
        // 编译器的参数
        CompilerParameters cp = new CompilerParameters();
        cp.ReferencedAssemblies.Add("System.dll");
        cp.ReferencedAssemblies.Add("System.Data.dll");
        cp.GenerateExecutable = false;
        cp.GenerateInMemory = true;
    
        //编译结果
        CompilerResults cr = cdp.CompileAssemblyFromSource(cp, HelloWorld(editor.Text));
    
        if (cr.Errors.HasErrors)
        {
            foreach (CompilerError item in cr.Errors)
            {
                string strInfo = string.Format("{0} {1}({2}:{3}):{4}", item.IsWarning ? "警告" : "错误", item.ErrorNumber, item.Line, item.Column, item.ErrorText);
                Console.WriteLine(strInfo);
            }
        }
        else
        {
            // 编译后的程序集
            Assembly ass = cr.CompiledAssembly;
            // 得到HelloWorld类中的Program方法
            Type type = ass.GetType("HelloWorld.Program");
            MethodInfo mi = type.GetMethod("Main");
    
            // 执行
            mi.Invoke(null, null);
        }
        // 动态构建的代码
        static string HelloWorld(string str)
        {
            StringBuilder sbCode = new StringBuilder();
            sbCode.Append(str);
            return sbCode.ToString();
        }
    }

    效果如下:

     

     

  • 相关阅读:
    Aop 打印参数日志时,出现参数序列化异常。It is illegal to call this method if the current request is not in asynchron
    Nginx 配置反向代理ip
    springboot 的启动流程
    sqlserver 查看表死锁
    idea 中 下载源码:Sources not download for:
    sqlserver exists 与 in 的区别
    sqlserver case when 的使用方法
    Java项目启动时执行指定方法的几种方式
    使用多线程并获取执行结果
    nodejs实现一个文件存储服务
  • 原文地址:https://www.cnblogs.com/zhaogaojian/p/13951667.html
Copyright © 2020-2023  润新知