How can I evaluate C# code dynamically?

Using the Roslyn scripting API (more samples here):

// add NuGet package 'Microsoft.CodeAnalysis.Scripting'
using Microsoft.CodeAnalysis.CSharp.Scripting;

await CSharpScript.EvaluateAsync("System.Math.Pow(2, 4)") // returns 16

You can also run any piece of code:

var script = await CSharpScript.RunAsync(@"
                class MyClass
                { 
                    public void Print() => System.Console.WriteLine(1);
                }")

And reference the code that was generated in previous runs:

await script.ContinueWithAsync("new MyClass().Print();");

Leave a Comment