using System; using System.Collections.Generic; using System.IO; using System.IO.Compression; using System.Linq; using System.Reflection; using System.Text; using CoreCms.Net.Model.ViewModels.Basics; using DotLiquid; using SqlSugar; namespace CoreCms.Net.CodeGenerator { /// /// 自动生成代码 /// public static class GeneratorCodeHelper { /// /// 单表生成对应数据 /// /// 表名称 /// 表说明 /// 表字段 public static byte[] CodeGenerator(string tableName, string tableDescription, List columns, string fileType, bool isVue = false) { //ModelClassName //ModelName //ModelFields Name Comment var dt = DateTime.Now; byte[] data; var obj = new { ModelCreateTime = dt, ModelName = tableName, ModelDescription = tableDescription, ModelClassName = tableName, ModelFields = columns.Select(r => new { r.DbColumnName, r.ColumnDescription, r.DataType, r.DecimalDigits, r.DefaultValue, r.IsIdentity, r.IsNullable, r.IsPrimarykey, //Length = (r.DataType == "nvarchar" && r.Length > 0) ? r.Length / 2 : r.Length, r.Length, r.PropertyName, r.PropertyType, r.Scale, r.TableId, r.TableName, r.Value }).ToArray() }; var assembly = IntrospectionExtensions.GetTypeInfo(typeof(GeneratorCodeHelper)).Assembly; using (MemoryStream ms = new MemoryStream()) { using (ZipArchive zip = new ZipArchive(ms, ZipArchiveMode.Create, false)) { string file; string result; Template template; switch (fileType) { case "AllFiles": //Controller using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Controllers.Controller.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry4 = zip.CreateEntry("Controller/" + tableName + "Controller.cs"); using (StreamWriter entryStream = new StreamWriter(entry4.Open())) { entryStream.Write(result); } } //IRespository using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Repositories.IRepository.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry3 = zip.CreateEntry("IRepository/I" + tableName + "Repository.cs"); using (StreamWriter entryStream = new StreamWriter(entry3.Open())) { entryStream.Write(result); } } //Respository using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Repositories.Repository.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("Repository/" + tableName + "Repository.cs"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } //IServices using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Services.IServices.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry3 = zip.CreateEntry("IServices/I" + tableName + "Services.cs"); using (StreamWriter entryStream = new StreamWriter(entry3.Open())) { entryStream.Write(result); } } //Services using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Services.Services.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("Services/" + tableName + "Services.cs"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } //Model using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.DbModel.Model.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("Entity/" + tableName + ".cs"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } // 生成layUI 前端代码 if (isVue == false) { CodeGeneratorForLayUI(obj, tableName, zip); } // 生成 vue 前端代码 else { CodeGeneratorForVue(obj, tableName, zip); } break; case "EntityFiles": //Model using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.DbModel.Model.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("Entity/" + tableName + ".cs"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } break; case "ServicesFiles": //IServices using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Services.IServices.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry3 = zip.CreateEntry("IServices/I" + tableName + "Services.cs"); using (StreamWriter entryStream = new StreamWriter(entry3.Open())) { entryStream.Write(result); } } //Services using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Services.Services.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("Services/" + tableName + "Services.cs"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } break; case "ViewFiles": if (isVue == false) { CodeGeneratorForLayUI(obj, tableName, zip); } else { CodeGeneratorForVue(obj, tableName, zip); } break; case "InterFaceFiles": //IRespository using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Repositories.IRepository.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry3 = zip.CreateEntry("IRepository/I" + tableName + "Repository.cs"); using (StreamWriter entryStream = new StreamWriter(entry3.Open())) { entryStream.Write(result); } } //Respository using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Repositories.Repository.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("Repository/" + tableName + "Repository.cs"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } break; } } data = ms.ToArray(); } return data; } /// /// 生成整个数据库文件 /// /// 表名称 /// 表说明 /// 表字段 public static byte[] CodeGeneratorAll(List dbModels, string fileType, bool isVue = false) { //ModelClassName //ModelName //ModelFields Name Comment byte[] data; var assembly = IntrospectionExtensions.GetTypeInfo(typeof(GeneratorCodeHelper)).Assembly; using (MemoryStream ms = new MemoryStream()) { using (ZipArchive zip = new ZipArchive(ms, ZipArchiveMode.Create, false)) { string file; string result; Template template; foreach (var item in dbModels) { var obj = new { ModelName = item.Name, ModelDescription = item.Description, ModelClassName = item.Name, ModelFields = item.columns.Select(r => new { r.DbColumnName, r.ColumnDescription, r.DataType, r.DecimalDigits, r.DefaultValue, r.IsIdentity, r.IsNullable, r.IsPrimarykey, Length = (r.DataType == "nvarchar" && r.Length > 0) ? r.Length / 2 : r.Length, r.PropertyName, r.PropertyType, r.Scale, r.TableId, r.TableName, r.Value }).ToArray() }; switch (fileType) { case "AllFiles": //Controller using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Controllers.Controller.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry4 = zip.CreateEntry("Controller/" + item.Name + "Controller.cs"); using (StreamWriter entryStream = new StreamWriter(entry4.Open())) { entryStream.Write(result); } } //IRespository using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Repositories.IRepository.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry3 = zip.CreateEntry("IRepository/I" + item.Name + "Repository.cs"); using (StreamWriter entryStream = new StreamWriter(entry3.Open())) { entryStream.Write(result); } } //Respository using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Repositories.Repository.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("Repository/" + item.Name + "Repository.cs"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } //IServices using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Services.IServices.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry3 = zip.CreateEntry("IServices/I" + item.Name + "Services.cs"); using (StreamWriter entryStream = new StreamWriter(entry3.Open())) { entryStream.Write(result); } } //Services using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Services.Services.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("Services/" + item.Name + "Services.cs"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } //Model using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.DbModel.Model.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("Entity/" + item.Name + ".cs"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } // 生成 if (isVue == false) { CodeGeneratorForLayUI(obj, item.Name, zip); } else { CodeGeneratorForVue(obj, item.Name, zip); } break; case "EntityFiles": //Model using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.DbModel.Model.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("Entity/" + item.Name + ".cs"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } break; case "ServicesFiles": //IServices using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Services.IServices.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry3 = zip.CreateEntry("IServices/I" + item.Name + "Services.cs"); using (StreamWriter entryStream = new StreamWriter(entry3.Open())) { entryStream.Write(result); } } //Services using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Services.Services.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("Services/" + item.Name + "Services.cs"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } break; case "ViewFiles": if (isVue == false) { CodeGeneratorForLayUI(obj, item.Name, zip); } else { CodeGeneratorForVue(obj, item.Name, zip); } break; case "InterFaceFiles": //IRespository using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Repositories.IRepository.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry3 = zip.CreateEntry("IRepository/I" + item.Name + "Repository.cs"); using (StreamWriter entryStream = new StreamWriter(entry3.Open())) { entryStream.Write(result); } } //Respository using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Repositories.Repository.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("Repository/" + item.Name + "Repository.cs"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } break; } } } data = ms.ToArray(); } return data; } public static void CodeGeneratorForLayUI(object obj, string tableName, ZipArchive zip) { var assembly = IntrospectionExtensions.GetTypeInfo(typeof(GeneratorCodeHelper)).Assembly; string file; string result; Template template; //CreateHtml using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Create.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/create.html"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } //EditHtml using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Edit.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/edit.html"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } //DetailsHtml using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Details.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/details.html"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } //IndexHtml using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.View.Index.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("Html/" + tableName.ToLower().ToLower() + "/index.html"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } } // 生成vue 前端代码 public static void CodeGeneratorForVue(object obj, string tableName, ZipArchive zip) { // 前端页面 var assembly = IntrospectionExtensions.GetTypeInfo(typeof(GeneratorCodeHelper)).Assembly; string file; string result; Template template; //CreateHtml using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.Index.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("pages/" + tableName + "/" + tableName + "/index.vue"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } // 创建页面路由 using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.PageRouter.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("pages/" + tableName + "/router.ts"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } // 导出页面路由 using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.PageRouterIndex.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("pages/" + tableName + "/index.ts"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } // 创建路由 using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.Router.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("router.ts"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } // 前端接口模型 using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.Model.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("models/" + tableName + "/index.ts"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } // 前端服务(Service) using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.Service.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("services/" + tableName + "Service/index.ts"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } // 前端 服务端调用的API 地址 using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.Api.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("services/" + tableName + "Service/api.ts"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } // 前端 数据状态 using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.Store.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("store/modules/" + tableName + "/index.ts"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } // 前端 数据状态管理默认导出index using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.StoreModulesIndex.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("store/modules/index.ts"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } // 创建数据表达配置 using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.FormSchema.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("pages/" + tableName + "/" + tableName + "/form-schema.ts"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } // 创建查看详情配置 using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.DetailConfig.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("pages/" + tableName + "/" + tableName + "/detail-config.ts"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } // 创建表格搜索字段配置 using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.SearchField.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("pages/" + tableName + "/" + tableName + "/search-field.ts"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } // 创建表格字段配置 using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Vue.TableConfig.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("pages/" + tableName + "/" + tableName + "/table-config.ts"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } } public static void CodeGeneratorForInterFaceFiles(object obj, string tableName, ZipArchive zip) { var assembly = IntrospectionExtensions.GetTypeInfo(typeof(GeneratorCodeHelper)).Assembly; string file; string result; Template template; //IRespository using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Repositories.IRepository.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry3 = zip.CreateEntry("IRepository/I" + tableName + "Repository.cs"); using (StreamWriter entryStream = new StreamWriter(entry3.Open())) { entryStream.Write(result); } } //Respository using (var reader = new StreamReader(assembly.GetManifestResourceStream("CoreCms.Net.CodeGenerator.CrudTemplete.Repositories.Repository.tpl"), Encoding.UTF8)) { file = reader.ReadToEnd(); template = Template.Parse(file); result = template.Render(Hash.FromAnonymousObject(obj)); ZipArchiveEntry entry1 = zip.CreateEntry("Repository/" + tableName + "Repository.cs"); using (StreamWriter entryStream = new StreamWriter(entry1.Open())) { entryStream.Write(result); } } } } }