Example #1
0
 /// <summary>
 /// 安装入口
 /// </summary>
 /// <param name="parameter">安装参数</param>
 /// <returns>是否安装成功</returns>
 public bool Run(ProjectParameter parameter)
 {
     if (parameter != null)
     {
         foreach (Type type in parameter.Types)
         {
             if (typeof(CombinationTemplateConfig).IsAssignableFrom(type) && type != typeof(CombinationTemplateConfig))
             {
                 CombinationTemplateConfig config    = (CombinationTemplateConfig)Activator.CreateInstance(type);
                 DirectoryInfo             directory = new DirectoryInfo(parameter.ProjectPath + config.TemplatePath);
                 if (directory.Exists)
                 {
                     LeftArray <string>[] codes = Directory.GetFiles(directory.FullName, "*.cs").getArray(name => code(name));
                     if (!codes.any(code => code.Length == 0))
                     {
                         string fileName = parameter.ProjectPath + @"{" + parameter.DefaultNamespace + "}.CombinationTemplate.cs";
                         if (Coder.WriteFile(fileName, Coder.WarningCode + string.Concat(codes.getArray(code => code.ToArray()).getArray()) + Coder.FileEndCode))
                         {
                             Messages.Message(fileName + " 被修改");
                         }
                         return(true);
                     }
                 }
                 else
                 {
                     Messages.Message("没有找到自定义模板相对项目路径" + config.TemplatePath);
                 }
             }
         }
         return(true);
     }
     return(false);
 }
Example #2
0
 /// <summary>
 /// 安装入口
 /// </summary>
 /// <param name="parameter">安装参数</param>
 /// <returns>是否安装成功</returns>
 public bool Run(ProjectParameter parameter)
 {
     if (parameter != null)
     {
         if (parameter.IsAutoCSerCodeGenerator || parameter.IsCustomCodeGenerator)
         {
             LeftArray <Definition> definitions = (parameter.IsCustomCodeGenerator ? parameter.Assembly : ProjectParameter.CurrentAssembly).GetTypes().getArray(type => new Definition {
                 Type = type, Auto = type.customAttribute <GeneratorAttribute>(), Parameter = parameter
             })
                                                  .getFind(type => type.Auto != null && type.Auto.IsTemplate)// && type.Auto.DependType == typeof(cSharper)
                                                  .Sort((left, right) => string.CompareOrdinal(left.Type.FullName, right.Type.FullName));
             LeftArray <string> codes = new LeftArray <string>(definitions.Length);
             foreach (Definition definition in definitions)
             {
                 codes.Add(definition.ToString());
                 if (Messages.IsError)
                 {
                     return(false);
                 }
             }
             string fileName = parameter.ProjectPath + @"{AutoCSer}.CSharper.cs";
             if (Coder.WriteFile(fileName, Coder.WarningCode + string.Concat(codes.ToArray()) + Coder.FileEndCode))
             {
                 Messages.Add(fileName + " 被修改");
                 throw new Exception();
             }
         }
         return(true);
     }
     return(false);
 }
Example #3
0
 /// <summary>
 /// 安装入口
 /// </summary>
 /// <param name="parameter">安装参数</param>
 /// <returns>是否安装成功</returns>
 public bool Run(ProjectParameter parameter)
 {
     if (parameter != null)
     {
         HashSet <string> codeFileNames = new HashSet <string>();
         foreach (Type type in parameter.Types ?? EmptyArray <Type> .Array)
         {
             if (!type.IsAbstract && typeof(CombinationTemplateConfig).IsAssignableFrom(type) && type != typeof(CombinationTemplateConfig))
             {
                 CombinationTemplateConfig config = (CombinationTemplateConfig)Activator.CreateInstance(type);
                 string codeFileName = config.GetCodeFileName(parameter.DefaultNamespace);
                 if (!codeFileNames.Add(codeFileName))
                 {
                     Messages.Error("自定义简单组合模板目标文件名称冲突 " + codeFileName);
                     return(false);
                 }
                 LeftArray <string> codes = new LeftArray <string>(0);
                 foreach (string templatePath in config.TemplatePath)
                 {
                     DirectoryInfo directory = new DirectoryInfo(Path.Combine(parameter.ProjectPath, templatePath));
                     if (directory.Exists)
                     {
                         foreach (FileInfo file in directory.GetFiles("*.cs"))
                         {
                             LeftArray <string> newCodes = getCode(file.FullName);
                             if (newCodes.Length == 0)
                             {
                                 return(false);
                             }
                             codes.Add(ref newCodes);
                         }
                     }
                     else
                     {
                         Messages.Error("没有找到自定义模板相对项目路径" + config.TemplatePath);
                         return(false);
                     }
                 }
                 string fileName = Path.Combine(parameter.ProjectPath, @"{" + codeFileName + "}.CombinationTemplate.cs");
                 if (Coder.WriteFile(fileName, Coder.WarningCode + string.Concat(codes.ToArray()) + Coder.FileEndCode))
                 {
                     Messages.Message(fileName + " 被修改");
                 }
             }
         }
         return(true);
     }
     return(false);
 }
Example #4
0
        /// <summary>
        /// CSharp代码生成器
        /// </summary>
        /// <param name="parameter">安装参数</param>
        /// <param name="type">模板数据视图</param>
        /// <param name="language">语言</param>
        public Coder(ProjectParameter parameter, Type type, CodeLanguage language)
            : base(type, Messages.Add, Messages.Message)
        {
            this.parameter = parameter;
            extensionName  = "." + EnumAttribute <CodeLanguage, CodeLanguageAttribute> .Array((int)(byte)language).ExtensionName;

            creators[Command.NOTE.ToString()]     = note;
            creators[Command.LOOP.ToString()]     = creators[Command.FOR.ToString()] = loop;
            creators[Command.AT.ToString()]       = at;
            creators[Command.PUSH.ToString()]     = push;
            creators[Command.IF.ToString()]       = ifThen;
            creators[Command.NOT.ToString()]      = not;
            creators[Command.NAME.ToString()]     = name;
            creators[Command.FROMNAME.ToString()] = fromName;
            creators[Command.PART.ToString()]     = part;
        }
Example #5
0
 /// <summary>
 /// 代码生成入口
 /// </summary>
 /// <param name="parameter">安装参数</param>
 /// <returns>是否生成成功</returns>
 public bool Run(ProjectParameter parameter)
 {
     if ((WebConfig = parameter.WebConfig) != null && WebConfig.IsWebView)
     {
         this.Parameter = parameter;
         Type exportPathType = WebConfig.ExportPathType;
         if (exportPathType != null)
         {
             DirectoryInfo viewDirectory = new DirectoryInfo(parameter.ProjectPath + WebConfig.ViewJsDirectory + Path.DirectorySeparatorChar);
             if (viewDirectory.Exists)
             {
                 string webPathFileName = viewDirectory.fullName() + "WebPath";
                 if (!(WebConfig.IsExportPathTypeScript ? TemplateGenerator.WebPath.TypeScript.Default.Run(exportPathType, webPathFileName) : TemplateGenerator.WebPath.JavaScript.Default.Run(exportPathType, webPathFileName)))
                 {
                     Messages.Message("WEB Path 生成失败");
                 }
             }
             else
             {
                 Messages.Message("没有找到 WEB 视图扩展默认目录 " + viewDirectory.FullName);
             }
         }
         if (WebConfig.IsCopyScript)
         {
             if (AutoCSerScriptPath == null)
             {
                 Messages.Message("没有找到 js 文件路径");
             }
             else
             {
                 copyScript();
             }
         }
         Htmls = DictionaryCreator.CreateHashString <HtmlJs>();
         if (!HtmlJs.Create(this))
         {
             return(false);
         }
         css();
         File.WriteAllText(parameter.ProjectPath + AutoCSer.Net.Http.Header.VersionFileName, HtmlJs.Version, System.Text.Encoding.ASCII);
     }
     return(true);
 }
 /// <summary>
 /// 安装入口
 /// </summary>
 /// <param name="parameter">安装参数</param>
 /// <returns>是否安装成功</returns>
 public bool Run(ProjectParameter parameter)
 {
     if (parameter != null)
     {
         //if (!parameter.IsAutoCSerCodeGenerator) return true;
         string path = parameter.ProjectPath + DefaultTemplatePath;
         if (Directory.Exists(path))
         {
             LeftArray <string>[] codes = Directory.GetFiles(path, "*.cs").getArray(name => code(name));
             if (!codes.any(code => code.Length == 0))
             {
                 string fileName = parameter.ProjectPath + @"..\Sort\{AutoCSer}.CombinationTemplate.cs";
                 if (Coder.WriteFile(fileName, Coder.WarningCode + string.Concat(codes.getArray(code => code.ToArray()).getArray()) + Coder.FileEndCode))
                 {
                     Messages.Message(fileName + " 被修改");
                 }
                 return(true);
             }
         }
     }
     return(false);
 }
Example #7
0
        /// <summary>
        /// 安装入口
        /// </summary>
        /// <param name="parameter">安装参数</param>
        /// <returns>是否安装成功</returns>
        public bool Run(ProjectParameter parameter)
        {
            if (parameter != null)
            {
                if (parameter.IsAutoCSerCodeGenerator || parameter.IsCustomCodeGenerator)
                {
                    LeftArray <Definition> definitions = (parameter.IsCustomCodeGenerator ? parameter.Assembly : ProjectParameter.CurrentAssembly).GetTypes().getArray(type => new Definition {
                        Type = type, Auto = type.customAttribute <GeneratorAttribute>(), Parameter = parameter
                    })
                                                         .getFind(type => type.Auto != null && type.Auto.IsTemplate)// && type.Auto.DependType == typeof(cSharper)
                                                         .Sort((left, right) => string.CompareOrdinal(left.Type.FullName, right.Type.FullName));
                    LeftArray <string> codes = new LeftArray <string>(definitions.Length);
                    foreach (Definition definition in definitions)
                    {
                        codes.Add(definition.ToString());
                        if (Messages.IsError)
                        {
                            return(false);
                        }
                    }
#if DotNetStandard
                    string path = new System.IO.FileInfo(parameter.AssemblyPath).Directory.fullName();
                    copyDotNetCoreJson(path, "AutoCSer.CodeGenerator.deps.json");
                    copyDotNetCoreJson(path, "AutoCSer.CodeGenerator.runtimeconfig.dev.json");
                    copyDotNetCoreJson(path, "AutoCSer.CodeGenerator.runtimeconfig.json");
#endif
                    string fileName = parameter.ProjectPath + @"{AutoCSer}.CSharper.cs";
                    if (Coder.WriteFile(fileName, Coder.WarningCode + string.Concat(codes.ToArray()) + Coder.FileEndCode))
                    {
                        Messages.Error(fileName + " 被修改");
                        return(false);
                    }
                }
                return(true);
            }
            return(false);
        }
Example #8
0
        ///// <summary>
        ///// 添加没有依赖的记忆代码
        ///// </summary>
        ///// <param name="code">没有依赖的记忆代码</param>
        //[MethodImpl(AutoCSer.MethodImpl.AggressiveInlining)]
        //public static void AddRemember(string code)
        //{
        //    rememberCodes.Add(code);
        //}
        /// <summary>
        /// 输出代码
        /// </summary>
        public static void Output(ProjectParameter parameter)
        {
            StringArray[] builders = new StringArray[codes.Length];
            for (int index = codes.Length; index != 0;)
            {
                StringArray builder = codes[--index];
                if (builder.Length != 0)
                {
                    builders[index] = builder;
                    codes[index]    = new StringArray();
                }
                CodeLanguage language = (CodeLanguage)(byte)index;
                switch (language)
                {
                case CodeLanguage.JavaScript:
                case CodeLanguage.TypeScript:
                    if (builders[index] != null)
                    {
                        Messages.Add("生成了未知的 " + language + " 代码。");
                    }
                    break;
                }
            }
            //StringArray rememberCodeBuilder = null;
            //if (rememberCodes.Length != 0)
            //{
            //    rememberCodeBuilder = rememberCodes;
            //    rememberCodes = new StringArray();
            //}
            codeTypes.Clear();
            if (Messages.IsError)
            {
                return;
            }
            //string message = string.Empty;
            for (int index = builders.Length; index != 0;)
            {
                StringArray builder = builders[--index];
                if (builder != null)
                {
                    switch (index)
                    {
                    case (int)CodeLanguage.CSharp:
                        string code = builder.ToString(), AutoCSerFileName = null;
#if !DotNetStandard
                        bool isAutoCSer = false;
#endif
                        if (!string.IsNullOrEmpty(code))
                        {
                            string fileName = parameter.ProjectPath + (AutoCSerFileName = "{" + parameter.DefaultNamespace + "}.AutoCSer.cs");
                            if (WriteFile(fileName, WarningCode + code + FileEndCode))
                            {
#if !DotNetStandard
                                isAutoCSer = true;
#endif
                                Messages.Message(fileName + " 被修改");
                                //message = fileName + " 被修改";
                            }
                        }
#if !DotNetStandard
                        if (parameter.IsProjectFile && isAutoCSer)
                        {
                            string projectFile = parameter.AssemblyPath + parameter.ProjectName + ".csproj";
                            if (File.Exists(projectFile))
                            {
                                string projectXml = File.ReadAllText(projectFile, System.Text.Encoding.UTF8);
                                if (isAutoCSer)
                                {
                                    AutoCSerFileName = @"<Compile Include=""" + AutoCSerFileName + @""" />";
                                }
                                int fileIndex;
                                if (isAutoCSer && (fileIndex = projectXml.IndexOf(AutoCSerFileName)) != -1)
                                {
                                    break;
                                }
                                string csFileName = @".cs"" />
";
                                if ((fileIndex = projectXml.IndexOf(csFileName)) != -1)
                                {
                                    if (isAutoCSer)
                                    {
                                        AutoCSerFileName += @"
    ";
                                    }
                                    projectXml = projectXml.Insert(fileIndex + csFileName.Length, AutoCSerFileName);
                                    MoveFile(projectFile, projectXml);
                                }
                            }
                        }
#endif
                        break;
                    }
                }
            }
            //if (message.Length != 0) AutoCSer.Log.Pub.Log.waitThrow(AutoCSer.Log.LogType.All, message);
        }