在应用程序中编译C#代码

ahm*_*iee 25 c# compilation c#-4.0

我想要一些代码来编译我的TextBox中的代码(例如).我的意思是我想在运行程序后编译代码.我怎样才能做到这一点?

Mer*_*ham 21

看到这篇文章:

http://support.microsoft.com/kb/304655

这是他们提供的示例代码:

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
            ;
    }
}
Run Code Online (Sandbox Code Playgroud)

正如Aliostad在他的回答中提到的那样,要小心这个解决方案.您需要确保已编译的代码最终自己AppDomain,否则您将遇到内存泄漏.

请参阅有关如何将代码加载到单独的相关问题AppDomain:

如何防止CompileAssemblyFromSource泄漏内存?


Ali*_*tad 17

看到这里这里.

请注意,任何编译和加载的代码都无法卸载.这可能会导致内存泄漏,即如果有人不断输入并更改代码并进行编译,程序集就会被加载,最终会耗尽内存.

一种解决方案是创建第二个AppDomain并在其中加载程序集,当不需要时,卸载AppDomain.

  • 你没看到我的评论吗? (3认同)