예제 #1
0
파일: Template.cs 프로젝트: jerry27syd/WPFs
        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);
        }
예제 #2
0
파일: Template.cs 프로젝트: jerry27syd/WPFs
        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;
        }
예제 #3
0
        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;
        }