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)
            {
    
            }
        }
    }

    https://www.cnblogs.com/nanfei/p/6046128.html

    /// <summary>
            /// 动态编译并执行代码
            /// </summary>
            /// <param name="code">代码</param>
            /// <param name="newPath">输出dll的路径</param>
            /// <returns>返回输出内容</returns>
            private CompilerResults debugRun(string[] code, string newPath)
            {
                CSharpCodeProvider complier = new CSharpCodeProvider();
                //设置编译参数
                CompilerParameters paras = new CompilerParameters();
                //引入第三方dll
                paras.ReferencedAssemblies.Add(@"System.dll");
                paras.ReferencedAssemblies.Add(@"System.configuration.dll");
                paras.ReferencedAssemblies.Add(@"System.Data.dll");
                paras.ReferencedAssemblies.Add(@"System.Management.dll");
                paras.ReferencedAssemblies.Add(@"System.Web.dll");
                paras.ReferencedAssemblies.Add(@"System.Xml.dll");
                paras.ReferencedAssemblies.Add(@"F:AuthorizationServiceLibNewtonsoft.JsonNet20Newtonsoft.Json.dll");
                //引入自定义dll
                //paras.ReferencedAssemblies.Add(@"D:自定义方法自定义方法inLogHelper.dll");
                //是否内存中生成输出
                paras.GenerateInMemory = false;
                //是否生成可执行文件
                paras.GenerateExecutable = false;
                paras.OutputAssembly = newPath;
    
                //编译代码
                CompilerResults result = complier.CompileAssemblyFromSource(paras, code);
    
                return result;
            }

    http://www.cnblogs.com/feigao/p/6197167.html

  • 相关阅读:
    硬盘安装CentOS 6.0(超级详细图文教程)
    js获取当前URL、域名、端口号
    前端匹配表情
    记一次复杂的数据转换
    浅拷贝与深拷贝
    js统计数组中元素的重复次数(二)
    js计算数组中某个元素重复出现的个数(一)
    移动端——处理rem根字体
    js实现简单的双向绑定
    JS正则截取两个字符串之间的字符串
  • 原文地址:https://www.cnblogs.com/chuancheng/p/8444566.html
Copyright © 2011-2022 走看看