简体   繁体   中英

Compile C# Code In The Application

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 , ie 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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM