public string GetDefaultTemplate(CodeBlockFile source, string nameSpaceId = "", string classId = "") { var id = Guid.NewGuid().ToString("N"); var nameSpace = nameSpaceId != string.Empty ? nameSpaceId : "NameSpace" + id; var className = classId != string.Empty ? classId : "Class" + id; return SourceCode.Replace("/*NAMESPACEID*/", nameSpace) .Replace("/*CLASSID*/", className) .Replace("/*USING*/", Using + source.Definition) .Replace("/*FIELD*/", source.Field) .Replace("/*CLASS*/", source.Class) .Replace("/*METHOD*/", source.Method) .Replace("/*ENTRY*/", source.SourceCode); }
private string Complie(string path, string textString, string codes) { string rtResult = String.Empty; CodeBlockFile source = null; if (path != null) { source = CodeBlock.GenerateSourceFile(path); } else if (textString != null) { source = CodeBlock.GenerateSourceFileFromString(textString); } else { source = new CodeBlockFile(); source.SourceCode = codes; } string finalCode = GetDefaultTemplate(source, NameSpaceId, ClassId); CompilerResults result = DotNetCompiler.CompileToAssembly(finalCode, Regex.Split(AssemblySources, Environment.NewLine), compileOptions: "/platform:anycpu"); if (result.Errors.Count == 0) { dynamic t = result.CompiledAssembly.CreateInstance(NameSpaceId + "." + ClassId); if (t != null) { rtResult = t.Start(); } else { rtResult = "RuntimeProgram is null"; throw new Exception(rtResult); } } else { foreach (CompilerError err in result.Errors) { rtResult += err.ErrorText + " " + err.Line.ToString() + Environment.NewLine; } throw new Exception(rtResult); } return rtResult; }
private static CodeBlockFile GenerateSourceFile(string rootFile, string textString) { IEnumerable<CodeBlock> list = rootFile != null ? SplitCodeAndText(rootFile) : SplitCodeAndTextFromString(textString); string code = SplitCodeAndContent(list, "S"); code = OpenDefintionLinkInCode(code); string usingBlock = ExtractDefintionBlock(code); string dllBlock = ExtractAssemblyBlock(code); string methodBlock = ExtractMethodBlock(code); string classBlock = ExtractClassBlock(code); string fieldBlock = ExtractFieldBlock(code); string strings = ExtractStringBlock(code); code = RemoveAllPatternBlocks(code); code = ProcessAllInlinePatterns(code, "S"); var codeFile = new CodeBlockFile(); codeFile.Definition = usingBlock; codeFile.SourceCode = strings + code; codeFile.Reference = dllBlock; codeFile.Class = classBlock; codeFile.Method =methodBlock ; codeFile.Field = fieldBlock; return codeFile; }