zoukankan      html  css  js  c++  java
  • C#动态编译并执行代码

    先来张运行时截图:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using Microsoft.CSharp;
    using System.CodeDom.Compiler;
    using System.Reflection;
    
    namespace CSharpDynamicCode
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void btnRun_Click(object sender, EventArgs e)
            {
                run();
            }
    
            void run()
            {
                CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();
                ICodeCompiler objICodeCompiler = objCSharpCodePrivoder.CreateCompiler();
    
                CompilerParameters objCompilerParameters = new CompilerParameters();
    
                //添加需要引用的dll
                objCompilerParameters.ReferencedAssemblies.Add("System.dll");
                objCompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");
    
                //是否生成可执行文件
                objCompilerParameters.GenerateExecutable = false;
    
                //是否生成在内存中
                objCompilerParameters.GenerateInMemory = true;
    
                //编译代码
                CompilerResults cr = objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, txtCode.Text);
    
                if (cr.Errors.HasErrors)
                {
                    var msg = string.Join(Environment.NewLine, cr.Errors.Cast<CompilerError>().Select(err => err.ErrorText));
                    MessageBox.Show(msg, "编译错误");
                }
                else
                {
                    Assembly objAssembly = cr.CompiledAssembly;
                    object objHelloWorld = objAssembly.CreateInstance("Test");
                    MethodInfo objMI = objHelloWorld.GetType().GetMethod("Hello");
                    objMI.Invoke(objHelloWorld, null);
                }
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
    
            }
        }
    }
  • 相关阅读:
    C++自定义一个foreach宏,偷偷懒
    线程池介绍与示例
    iOS消息中心与传感
    new 和 malloc 申请内存失败的区别处理
    iOS调试技巧——当程序崩溃的时候怎么办
    随机数原理
    iOS麦克风运用——腾讯微博“吹一吹”
    个人技术博客
    SDN第一次作业
    GitKraken 团队项目使用教程
  • 原文地址:https://www.cnblogs.com/nanfei/p/6046128.html
Copyright © 2011-2022 走看看