程序動態編譯代碼
阿新 • • 發佈:2017-09-07
控制臺 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 = newCSharpCodeProvider()) { 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 它有代碼提示功能,所以自己編寫的代碼文本一定不能有錯;
程序動態編譯代碼