I want some code that compiles the code that is in my TextBox (for example). What I mean is I want to compile code after running the program. How can I do this?
See this article:
http://support.microsoft.com/kb/304655
Here's the sample code they provide:
var codeProvider = new CSharpCodeProvider(); ICodeCompiler icc = codeProvider.CreateCompiler(); var parameters = new CompilerParameters() { GenerateExecutable = true, OutputAssembly = Output, }; CompilerResults results = icc.CompileAssemblyFromSource(parameters, sourceString); if (results.Errors.Count > 0) { foreach(CompilerError error in results.Errors) { textBox2.Text = textBox2.Text + "Line number " + error.Line + ", Error Number: " + error.ErrorNumber + ", '" + error.ErrorText + ";" + Environment.NewLine + Environment.NewLine ; } }
As Aliostad has mentioned in his answer, be careful with this solution, though. You will need to make sure your compiled code ends up in its own AppDomain
, otherwise you will experience memory leaks.
See this related question on how to load the code into a separate AppDomain
:
How can I prevent CompileAssemblyFromSource from leaking memory?
See here and here.
Just be careful, any code that is compiled and loaded, cannot be unloaded. This can cause memory leak, i.e. if someone keeps typing and changing the code and compiling it, assemblies get loaded and you will ultimately run out of memory.
One solution is to create a second AppDomain and load the assembly in there and when not needed, unload the AppDomain.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With