不幸的是,从语法树创建脚本对象的方法是Microsoft程序集的内部方法。
但是,您不必编译两次—您可以只解析第一次,然后再编译第二次。
var expression = "System.Console.WriteLine(\"Test\")";
var origTree = CSharpSyntaxTree.ParseText(expression,
CSharpParseOptions.Default.WithKind(SourceCodeKind.Script));
var root = origTree.GetRoot();
// -Snip- tree manipulation
var script = CSharpScript.Create(otherRoot.ToString());
var errors = script.Compile();
if(errors.Any(x => x.Severity == DiagnosticSeverity.Error)) {
throw new Exception($"Compilation errors:\n{string.Join("\n", errors.Select(x => x.GetMessage()))}");
}
await script.RunAsync();