using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Newtonsoft.Json.Linq;
public static void Main(string[] args)
public static void Example1()
var assemblyName = "UserScript";
var code = @"namespace UserScript {
public static string Eval() {
TagLib.File tfile = default;
return JsonConvert.SerializeObject(new int[] {1,2,3,4});
SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(code);
var references = AppDomain.CurrentDomain
.Where(a => !a.IsDynamic)
.Where(s => !string.IsNullOrEmpty(s))
.Where(s => !s.Contains("xunit"))
.Select(s => MetadataReference.CreateFromFile(s))
CSharpCompilation compilation = CSharpCompilation.Create(
new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary));
using (var memoryStream = new MemoryStream())
var result = compilation.Emit(memoryStream);
memoryStream.Seek(0, SeekOrigin.Begin);
Assembly assembly = Assembly.Load(memoryStream.ToArray());
var testClassType = assembly.GetType("UserScript.RunScript");
var invokeResult = (string)testClassType.GetMethod("Eval").Invoke(null, null);
Console.WriteLine(invokeResult);
Console.WriteLine("Failed to compile");
foreach (var diag in result.Diagnostics)