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

本文关键字:代码 编译 应用程序 | 更新日期: 2023-09-27 18:12:41

我想要一些代码来编译我的TextBox(例如)中的代码。我的意思是我想在运行程序后编译代码。我该怎么做呢?

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

查看本文:

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
            ;
    }
}

正如Aliostad在他的回答中提到的,要小心使用这个解决方案。您需要确保编译后的代码在自己的AppDomain中结束,否则您将遇到内存泄漏。

参见如何将代码加载到单独的AppDomain中的相关问题:

如何防止CompileAssemblyFromSource泄漏内存?

参见此处和此处。

只是要小心,任何编译和加载的代码都不能卸载。这可能会导致内存泄漏,即如果有人不断输入和修改代码并编译它,程序集被加载,最终将耗尽内存。

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