using System.Threading.Tasks;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp.Scripting;
public static async Task Main()
var options = Microsoft.CodeAnalysis.Scripting.ScriptOptions
.Default.WithImports(Array.Empty<string>())
.WithReferences(Array.Empty<MetadataReference>());
var deleg = await CSharpScript.EvaluateAsync<Func<string, string, string>>(@"
var singleString = new[]{s2.GetType()};
var a1 = s1.GetType().Assembly;
var at = a1.GetType().BaseType;
var load = at.GetMethod(""Load"", singleString);
var consoleAssembly = load.Invoke(null, new[]{""System.Console""});
var getType = at.GetMethod(""GetType"", singleString);
var type = s1.GetType().GetType().BaseType.BaseType;
var getMethod = type.GetMethod(""GetMethod"", new[]{s1.GetType(), singleString.GetType()});
var con = getType.Invoke(consoleAssembly, new[]{""System.Console""});
var methodBase = getType.GetType().BaseType.BaseType;
var invoke = methodBase.GetMethod(""Invoke"", new[]{typeof(object), typeof(object[])});
var writeLine = getMethod.Invoke(con, new object[]{""WriteLine"", singleString});
var dir = s1.GetType().Assembly.GetType(""System.IO.Directory"");
var getFiles = getMethod.Invoke(dir, new object[]{""GetFiles"", singleString});
var files = (string[])invoke.Invoke(getFiles, new object[]{null, new object[]{""/bin""}});
foreach(var file in files)
invoke.Invoke(writeLine, new object[]{null, new object[]{file}});
Console.WriteLine(deleg("Hello, ", "Alice!"));