1. 程式人生 > >程序動態編譯代碼

程序動態編譯代碼

控制臺 height 只需要 sem rpc dep pos width true

c#可以在程序運行過程中動態的編譯代碼,並生成程序集加載在內存,然後就可以動態的調用代碼生成的程序了,這有點像我們的vs編譯器,感興趣的可以制作屬於自己的c#編譯器:

要實現這種功能,我們只需要調用CSharpCodeProvider就可以實現了:

string prefix = "using System;"+
                "public static class Test{"+
                "public static void Run(){";
            string postfix = "}}";
            using (CSharpCodeProvider provider = new
CSharpCodeProvider()) { var code = prefix + "Console.Write(\"Hello,Wolrd,Jack\");" + postfix; var compilerResult= provider.CompileAssemblyFromSource(new CompilerParameters() { GenerateInMemory = true }, code); var type = compilerResult.CompiledAssembly.GetType("
Test"); type.InvokeMember("Run", BindingFlags.Static|BindingFlags.InvokeMethod|BindingFlags.Public, null, null, null); }


這段代碼 就是把一個Test的類動態編譯,然後執行類裏面的Run方法,在控制臺輸出Hello,Wolrd,Jack;註意的是,你添加的文本代碼裏面需要註意語法,如果有語法錯誤,是編譯不了的,不像我們的vs 它有代碼提示功能,所以自己編寫的代碼文本一定不能有錯;


技術分享

程序動態編譯代碼