C# 动态执行代码(执行string类型代码) (转)

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Collections;
using System.Diagnostics;
using System.IO;

namespace ConsoleApplication
{
    class Program3
    {
        static void Main(string[] args)
        {
            // 定义需要动态执行的 C# 代码字符串,当然也可从文本文件中读取。
            string code = @"
                using System;
                namespace MyNamespace
                {
                    public class MyClass
                    {
                        private string name;

                        public MyClass(string name)
                        {
                            this.name = name;
                        }

                        public void Test()
                        {
                            Console.WriteLine(""{0} - {1}"", name, DateTime.Now);
                        }
                    }
                }
            ";

            // 创建编译器对象
            Microsoft.CSharp.CSharpCodeProvider p = new Microsoft.CSharp.CSharpCodeProvider();
            System.CodeDom.Compiler.ICodeCompiler cc = p.CreateCompiler();

            // 设置编译参数
            System.CodeDom.Compiler.CompilerParameters options = new System.CodeDom.Compiler.CompilerParameters();
            options.ReferencedAssemblies.Add("System.dll");
            options.GenerateInMemory = true;
            options.OutputAssembly = "MyTest";

            // 开始编译
            System.CodeDom.CodeSnippetCompileUnit cu = new System.CodeDom.CodeSnippetCompileUnit(code);
            System.CodeDom.Compiler.CompilerResults cr = cc.CompileAssemblyFromDom(options, cu);

            // 执行动态程序集相关内容。
            Type t = cr.CompiledAssembly.GetType("MyNamespace.MyClass");
            object o = cr.CompiledAssembly.CreateInstance("MyNamespace.MyClass", false, System.Reflection.BindingFlags.Default,
                null, new object[] { "Tomdd" }, System.Globalization.CultureInfo.CurrentCulture, null);
            t.InvokeMember("Test", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.InvokeMethod,
                null, o, null);
            Console.ReadKey();

        }
    }
}

转自:http://blog.163.com/kunkun0921@126/blog/static/16920433220126623536526/

转载于:https://www.cnblogs.com/karl-wu/articles/4365610.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值