/// <summary> /// 生成EntityManager /// </summary> /// <param name="entityFolder"></param> private void CreateEntityManager(ProjectItem entityFolder) { string content = Engine.Razor.RunCompile("ManagerTemplate", typeof(EntityFileModel), fileModel); string fileName = $"{fileModel.Name}Manager.cs"; SolutionUnit.AddFileToProjectItem(entityFolder, content, fileName); }
/// <summary> /// 生成枚举文件 /// </summary> /// <param name="entityFolder"></param> /// <param name="enumEntity"></param> private void CreateEnum(ProjectItem entityFolder, EnumEntity enumEntity) { enumEntity.NameSpace = fileModel.EntityNamespace; string content = Engine.Razor.RunCompile("EnumTemplate", typeof(EnumEntity), enumEntity); string fileName = $"{enumEntity.EnumName}.cs"; SolutionUnit.AddFileToProjectItem(entityFolder, content, fileName); }
/// <summary> /// 生成创建Entity的Dto /// </summary> /// <param name="entityFolder"></param> private void CreateCreateEntityDto(ProjectItem entityFolder) { var dtoFolder = entityFolder.ProjectItems.AddFolder("Dtos"); fileModel.Namespace += $".{entityFolder.Name}"; fileModel.DirName = dtoFolder.Name; string content = Engine.Razor.RunCompile("CreateEntityDtoTemplate", typeof(EntityFileModel), fileModel); // content = content.Replace("< /summary>", "</summary>"); string fileName = $"{fileModel.Name}EditDto.cs"; SolutionUnit.AddFileToProjectItem(dtoFolder, content, fileName); }
private void InitData() { ThreadHelper.ThrowIfNotOnUIThread(); solutionProjectItems = SolutionUnit.GetSolutionProjects(_dte.Solution); coreProject = solutionProjectItems.FirstOrDefault(w => w.Name.EndsWith(".Core")).SubProject; applicationProject = solutionProjectItems.FirstOrDefault(w => w.Name.EndsWith(".Application")).SubProject; if (coreProject == null || applicationProject == null) { throw new Exception("项目的目录结构不符合本插件的预设,不能生成代码"); } }
/// <summary> /// 生成EntityAppService /// </summary> private void CreateEntityAppService() { var appServiceFolder = applicationProject.ProjectItems.AddFolder(fileModel.Name + "s"); fileModel.Namespace = applicationProject.Name; fileModel.DirName = appServiceFolder.Name; string content = Engine.Razor.RunCompile("AppServiceTemplate", typeof(EntityFileModel), fileModel); string fileName = $"{fileModel.Name}AppService.cs"; SolutionUnit.AddFileToProjectItem(appServiceFolder, content, fileName); CreateServiceDto(appServiceFolder); }
/// <summary> /// 添加DbSet到DbContext /// </summary> /// <param name="topProject"></param> /// <param name="className"></param> private void SetDbSetToDbContext(string namespaceStr, string className) { ThreadHelper.ThrowIfNotOnUIThread(); Project entityFrameworkProject = solutionProjectItems.Find(t => t.Name.EndsWith(".EntityFrameworkCore")).SubProject; ProjectItem customDbContextProviderProjectItem = _dte.Solution.FindProjectItem(entityFrameworkProject.FileName.Substring(0, entityFrameworkProject.FileName.LastIndexOf("\\")) + "\\EntityFrameworkCore\\DbContext.cs"); if (customDbContextProviderProjectItem != null) { CodeClass codeClass = SolutionUnit.GetClass(customDbContextProviderProjectItem.FileCodeModel.CodeElements); var codeChilds = codeClass.Collection; foreach (CodeElement codeChild in codeChilds) { var insertCode = codeChild.GetEndPoint(vsCMPart.vsCMPartBody).CreateEditPoint(); insertCode.Insert(" public virtual DbSet<" + namespaceStr + "." + className + "> " + className + "s { get; set; }\r\n"); } customDbContextProviderProjectItem.Save(); } }
/// <summary> /// 生成Entity类 /// </summary> private void CreateEntity() { /* * 1. 在Core下新建一个文件夹 * 2. 生成Entity文件 * 3. 生成创建Entity的Dto * 4. 生成EntityManager */ var entityFolder = coreProject.ProjectItems.AddFolder(fileModel.Name + "s"); fileModel.Namespace = $"{coreProject.Name}"; fileModel.DirName = entityFolder.Name; fileModel.EntityNamespace = $"{coreProject.Name}.{entityFolder.Name}"; string content = Engine.Razor.RunCompile("EntityTemplate", typeof(EntityFileModel), fileModel); content = content.Replace(""", "\""); string fileName = fileModel.Name + ".cs"; SolutionUnit.AddFileToProjectItem(entityFolder, content, fileName); SetDbSetToDbContext($"{fileModel.Namespace}.{fileModel.DirName}", fileModel.Name); SetPermissionName(fileModel.Name, fileModel.Description); if (chkManager.Checked) { CreateEntityManager(entityFolder); } CreateCreateEntityDto(entityFolder); if (enumEntities != null && enumEntities.Count > 0) { foreach (var item in enumEntities) { CreateEnum(entityFolder, item); } } }
/// <summary> /// 增加权限名称 /// </summary> private void SetPermissionName(string entityName, string description) { Project coreProject = solutionProjectItems.Find(t => t.Name.EndsWith(".Core")).SubProject; ProjectItem permissionNamesProjectItem = _dte.Solution.FindProjectItem(coreProject.FileName.Substring(0, coreProject.FileName.LastIndexOf("\\")) + "\\Authorization\\WmsPermissionNames.cs"); if (permissionNamesProjectItem != null) { CodeClass codeClass = SolutionUnit.GetClass(permissionNamesProjectItem.FileCodeModel.CodeElements); var codeChilds = codeClass.Collection; foreach (CodeElement codeChild in codeChilds) { var insertCode = codeChild.GetEndPoint(vsCMPart.vsCMPartBody).CreateEditPoint(); var code = $" #region {description}\r\n" + $" public const string Pages_{entityName}s = \"Pages.{entityName}s\";\r\n" + $" public const string Pages_{entityName}s_Edit = \"Pages.{entityName}s.Edit\";\r\n" + $" public const string Pages_{entityName}s_Delete = \"Pages.{entityName}s.Delete\";\r\n" + " #endregion\r\n"; insertCode.Insert(code); } permissionNamesProjectItem.Save(); } }
/// <summary> /// 生成Service下的Dto /// </summary> /// <param name="serviceFolder"></param> private void CreateServiceDto(ProjectItem serviceFolder) { var dtoFolder = serviceFolder.ProjectItems.AddFolder("Dtos"); fileModel.Namespace += $".{fileModel.DirName}"; fileModel.DirName = dtoFolder.Name; // 分页查询输入 string content = Engine.Razor.RunCompile("GetPagedInputTemplate", typeof(EntityFileModel), fileModel); string fileName = $"GetPaged{fileModel.Name}Input.cs"; SolutionUnit.AddFileToProjectItem(dtoFolder, content, fileName); // 分页结果 content = Engine.Razor.RunCompile("GetPagedOutputTemplate", typeof(EntityFileModel), fileModel); fileName = $"GetPaged{fileModel.Name}Output.cs"; SolutionUnit.AddFileToProjectItem(dtoFolder, content, fileName); // 单条编辑返回结果 content = Engine.Razor.RunCompile("GetForEditOutputTemplate", typeof(EntityFileModel), fileModel); fileName = $"Get{fileModel.Name}ForEditOutput.cs"; SolutionUnit.AddFileToProjectItem(dtoFolder, content, fileName); }
private void btnBuild_Click(object sender, EventArgs e) { var selectItem = (ProjectItemFullPath)comboBox1.SelectedValue; var projectItem = selectItem.ProjectItem; string namespaceStr = selectItem.Namespace; var dtoFileModel = new DtoFileModel { Description = txtRemark.Text, Name = txtName.Text, EntityName = lblSelectEntity.Text, UsingName = lblSelectEntity.Tag.ToString(), DirName = "", Namespace = namespaceStr, ClassProperties = new List <ClassProperty>() }; foreach (TextValue item in listSelectEntity.SelectedItems) { dtoFileModel.ClassProperties.Add(new ClassProperty { CnName = item.Text, Name = item.Value.Name, PropertyType = item.Value.PropertyType }); } string content = Engine.Razor.RunCompile("DtoTemplate", typeof(DtoFileModel), dtoFileModel); content = content.Replace("< /summary>", "</summary>"); string fileName = dtoFileModel.Name + ".cs"; SolutionUnit.AddFileToProjectItem(projectItem, content, fileName); MessageBox.Show("生成成功"); this.Close(); }
public void InitData() { ThreadHelper.ThrowIfNotOnUIThread(); if (_dte.SelectedItems.Count > 0) { SelectedItem selectedItem = _dte.SelectedItems.Item(1); ProjectItem selectProjectItem = selectedItem.ProjectItem; if (selectProjectItem != null) { #region 获取出基础信息 //获取当前点击的类所在的项目 Project topProject = selectProjectItem.ContainingProject; //当前类在当前项目中的目录结构 //string dirPath = GetSelectFileDirPath(topProject, selectProjectItem); //当前类命名空间 string namespaceStr = selectProjectItem.FileCodeModel.CodeElements.OfType <CodeNamespace>().First().FullName; //当前项目根命名空间 string applicationStr = ""; if (!string.IsNullOrEmpty(namespaceStr)) { applicationStr = namespaceStr.Substring(0, namespaceStr.IndexOf(".")); } //当前类 CodeClass codeClass = SolutionUnit.GetClass(selectProjectItem.FileCodeModel.CodeElements); //当前项目类名 string className = codeClass.Name; //当前类中文名 [Display(Name = "供应商")] string classCnName = ""; //当前类说明 [Description("品牌信息")] string classDescription = ""; //获取类的中文名称和说明 foreach (CodeAttribute classAttribute in codeClass.Attributes) { switch (classAttribute.Name) { case "Display": if (!string.IsNullOrEmpty(classAttribute.Value)) { string displayStr = classAttribute.Value.Trim(); foreach (var displayValueStr in displayStr.Split(',')) { if (!string.IsNullOrEmpty(displayValueStr)) { if (displayValueStr.Split('=')[0].Trim() == "Name") { classCnName = displayValueStr.Split('=')[1].Trim().Replace("\"", ""); } } } } break; case "Description": classDescription = classAttribute.Value; break; } } //获取当前解决方案里面的项目列表 List <ProjectItem> solutionProjectItems = SolutionUnit.GetSolutionProjects(_dte.Solution); #endregion DtoFileModel dtoModel = GetDtoModel("", "", classCnName, namespaceStr, classDescription, "", codeClass); lblSelectEntity.Text = className; lblSelectEntity.Tag = namespaceStr; var chkListDataSource = dtoModel.ClassProperties.Select(s => new TextValue { Text = $"{s.Name}-{s.CnName}", Value = s }).ToList(); listSelectEntity.DataSource = chkListDataSource; listSelectEntity.DisplayMember = "Text"; listSelectEntity.ValueMember = "Value"; var applicationProject = solutionProjectItems.Find(w => w.Name.EndsWith(".Application")); var coreProject = solutionProjectItems.Find(w => w.Name.EndsWith(".Core")); var comBoxDataSource = new List <TextProjectItem>(); comBoxDataSource.Add(new TextProjectItem { Text = applicationProject.Name, Value = new ProjectItemFullPath { ProjectItem = applicationProject, Namespace = applicationProject.Name } }); foreach (EnvDTE.ProjectItem item in applicationProject.SubProject.ProjectItems) { if (item.Kind == EnvDTE.Constants.vsProjectItemKindPhysicalFolder) { comBoxDataSource.Add(new TextProjectItem { Text = $" {item.Name}", Value = new ProjectItemFullPath { ProjectItem = item, Namespace = $"{applicationProject.Name}.{item.Name}" } }); } if (item.ProjectItems.Count > 0) { foreach (EnvDTE.ProjectItem childItem in item.ProjectItems) { if (childItem.Kind == EnvDTE.Constants.vsProjectItemKindPhysicalFolder) { comBoxDataSource.Add(new TextProjectItem { Text = $" {childItem.Name}", Value = new ProjectItemFullPath { ProjectItem = childItem, Namespace = $"{applicationProject.Name}.{item.Name}.{childItem.Name}" } }); } } } } comBoxDataSource.Add(new TextProjectItem { Text = coreProject.Name, Value = new ProjectItemFullPath { ProjectItem = coreProject, Namespace = coreProject.Name } }); foreach (EnvDTE.ProjectItem item in coreProject.SubProject.ProjectItems) { if (item.Kind == EnvDTE.Constants.vsProjectItemKindPhysicalFolder) { comBoxDataSource.Add(new TextProjectItem { Text = $" {item.Name}", Value = new ProjectItemFullPath { ProjectItem = item, Namespace = $"{coreProject.Name}.{item.Name}" } }); } if (item.ProjectItems.Count > 0) { foreach (EnvDTE.ProjectItem childItem in item.ProjectItems) { if (childItem.Kind == EnvDTE.Constants.vsProjectItemKindPhysicalFolder) { comBoxDataSource.Add(new TextProjectItem { Text = $" {childItem.Name}", Value = new ProjectItemFullPath { ProjectItem = childItem, Namespace = $"{coreProject.Name}.{item.Name}.{childItem.Name}" } }); } } } } comboBox1.DataSource = comBoxDataSource; comboBox1.DisplayMember = "Text"; comboBox1.ValueMember = "Value"; } } }