How to Dynamically compile C# code at Runtime

By FoxLearn 7/18/2024 7:33:56 AM   5.57K
To dynamically compile C# code at runtime in a Windows Forms application, you can use the CSharpCodeProvider class from the System.CodeDom.Compiler namespace.

Compiling and using C# code at runtime in a Windows Forms application can be achieved using reflection and the C# compiler service. Here's a basic outline of how you can accomplish this:

Open your Visual Studio, then click New Project, then select Visual C# on the left, then Windows and then select Windows Forms Application. Name your project "DynamicCompile" and then click OK

Drag and drop TextBox, Button controls from the Visual Studio toolbox onto your form designer, then design your form as shown below.

c# dynamic compile code

To compile C# code dynamically during runtime you can use the CSharpCodeProvider class in the System.CodeDom.Compiler namespace.

Add a click event handler to the Compile button as shown below.

//Compile code
private void btnCompile_Click(object sender, EventArgs e)
{
    // clear textbox, It's a TextBox control where user enters C# code
    txtStatus.Clear();
    // Compile the code
    CSharpCodeProvider csc = new CSharpCodeProvider(new Dictionary<string, string>() { { "CompilerVersion", txtFramework.Text } });
    // Set up the compiler parameters
    CompilerParameters parameters = new CompilerParameters(new[] { "mscorlib.dll", "System.Core.dll" }, txtOutput.Text, true);
    parameters.GenerateExecutable = true;
    CompilerResults results = csc.CompileAssemblyFromSource(parameters, txtSource.Text);
    if (results.Errors.HasErrors)
        results.Errors.Cast<CompilerError>().ToList().ForEach(error => txtStatus.Text += error.ErrorText + "\r\n");
    else
    {
        //Start your application
        txtStatus.Text = "----Build succeeded----";
        Process.Start(Application.StartupPath + "/" + txtOutput.Text);
    }
}

VIDEO TUTORIAL

Related