public static MethodDeclarationSyntax BuildVoidMainWaitForDebugger()
        {
            //add this
            var debuggerWait = CSharpSyntaxTree.ParseText(@"
public static void Main()
{
    var waitMax = 10*1000;
    var waited = 0;
    var waitInterval = 100;

    while (System.Diagnostics.Debugger.IsAttached == false && waited < waitMax)
    {
        System.Threading.Thread.Sleep(waitInterval);
        waited += waitInterval;
    }

    if (waitMax < waitInterval)
    {
        throw new Exception(""Failed to get debugger attached in time"");
    }

    new ScriptyDebugCls().ScriptyDebugMeth();
}");

            var dwMcu      = GetRootMainCompilationUnit(debuggerWait);
            var memberDecl = (MethodDeclarationSyntax)dwMcu.Members.First();
            var statements = memberDecl.Body;

            var method = SyntaxBuilder.Method("Main", statements).AsPublic().AsStatic().AsReturnVoid();

            return(method);
        }
        public static CompilationUnitSyntax WrapScriptInStandardClass(CompilationUnitSyntax strippedScript,
                                                                      string namespaceName, string className, string methodName, string scriptFilePath, List <string> usings)
        {
            var scriptStatements     = SyntaxFactory.ParseStatement(strippedScript.GetText().ToString());
            var voidMain             = BuildVoidMainWaitForDebugger();
            var scriptMethod         = SyntaxBuilder.Method(methodName, scriptStatements).AsPublic();
            var injectedContextField = SyntaxBuilder.BuildField(scriptFilePath, typeof(object), "_context");
            var wrappingClass        = SyntaxBuilder.BuildClassWrapper(className,
                                                                       new MemberDeclarationSyntax[] { injectedContextField }, new MemberDeclarationSyntax[] { voidMain, scriptMethod })
                                       .AsSerializable();

            var wrappingNamespace = SyntaxBuilder.NamespaceWrapper(namespaceName, usings,
                                                                   new MemberDeclarationSyntax[] { wrappingClass });

            return(wrappingNamespace);
        }