Example #1
0
        /// <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);
        }
Example #2
0
        /// <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);
        }
Example #3
0
        /// <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);
        }
Example #4
0
        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("项目的目录结构不符合本插件的预设,不能生成代码");
            }
        }
Example #5
0
        /// <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);
        }
Example #6
0
        /// <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();
            }
        }
Example #7
0
        /// <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("&quot;", "\"");
            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);
                }
            }
        }
Example #8
0
        /// <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();
            }
        }
Example #9
0
        /// <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";
                }
            }
        }