Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Compile C# Code In The Application

Tags:

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?

like image 256
ahmadali shafiee Avatar asked Oct 30 '11 08:10

ahmadali shafiee


2 Answers

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?

like image 112
Merlyn Morgan-Graham Avatar answered Dec 05 '22 20:12

Merlyn Morgan-Graham


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.

like image 40
Aliostad Avatar answered Dec 05 '22 18:12

Aliostad