`

C# 将字符串动态编译为Assembly

阅读更多

 

/*
        using System.Reflection;
        using System.CodeDom;
        using System.CodeDom.Compiler;
         */
        private void Compiler()
        {
            CompilerParameters vCompilerParameters = new CompilerParameters();
            vCompilerParameters.GenerateExecutable = false;
            vCompilerParameters.GenerateInMemory = true;

            vCompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");//添加引用
            string vSource =
                "using System.Windows.Forms; " +//添加引用
                "public class ClassTemp " +
                "{ public ClassTemp(string ls_cs){MessageBox.Show(ls_cs);}" +
                "    public void Test(string ls_test) " +
                "    { " +
                "         MessageBox.Show(ls_test);" +
                "    } " +               
                "} ";
            CompilerResults vCompilerResults =
                CodeDomProvider.CreateProvider("CSharp").CompileAssemblyFromSource(vCompilerParameters, vSource);

            Assembly vAssembly = vCompilerResults.CompiledAssembly;//至此编译出Assembly

            Object[] args1 = new Object[1];
            args1[0] = "test";
            object vTemp = vAssembly.CreateInstance("ClassTemp", true, System.Reflection.BindingFlags.Default, null, args1, null, null);//创建类的实例
            MethodInfo vTest = vTemp.GetType().GetMethod("Test");//从实例中取到方法放入MethodInfo中         

            Object[] args = new Object[1];
            args[0] = "test";
            vTest.Invoke(vTemp, args);//调用方法
        }

分享到:
评论

相关推荐

    如何用C#动态编译、执行代码

    CompilerAssemblyFromSource(CompilerParameters option, string source):使用指定的编译器,从包含源代码的字符串设置编译程序集。 三、CompilerParameters 表示用于调用编译器的参数。 ReferencedAssemblies:...

    C#微软培训资料

    超越今天各自为营的超越今天各自为营的 超越今天各自为营的 Web 站点 站点站点 站点 把 把把 把 Internet 建成一 建成建成 建成 个 一个一 一个可 可个可 可 以互相交换组件的地方 以互相...

    Spring.net框架

    SayHello类持有一个对EnHelloGenerator的引用,并负责将生成出来的问候字符串打印出来。 using System; namespace IocInCSharp { public class SayHello { private EnHelloGenerator _helloGen; public ...

    GhostBuild:GhostBuild是用于各种GhostPack.NET项目的简单MSBuild启动器的集合。

    幽灵建造GhostBuild是用于各种项目(由编写)的简单MSBuild启动器的(POC)集合。... 这是一个字符串数组,因此用引号引起来并用逗号分隔(例如“ arg1”,“ arg2”)。 从Out-CompressedDll操作复制压缩的.Net程

Global site tag (gtag.js) - Google Analytics