/// <summary> /// 生成代码 /// </summary> /// <returns></returns> public string BuildCode() { CodeBuilder builder = new CodeBuilder(); string basePath = GetBasePath(); StreamWriter sw = null; TemplateDTO.Solution solution = new TemplateDTO.Solution(); #region 生成 Deploy 部分代码 #region 生成生成Deploy代码过程中可能用到的文件夹 string projPath = basePath + @"\Deploy\"; string assemblyPath = projPath + @"Properties\"; string codePath = projPath + @"Entity\"; string extendCodePath = projPath + @"Extend\"; if (!Directory.Exists(projPath)) { Directory.CreateDirectory(projPath); } if (!Directory.Exists(assemblyPath)) { Directory.CreateDirectory(assemblyPath); } if (!Directory.Exists(codePath)) { Directory.CreateDirectory(codePath); } if (!Directory.Exists(extendCodePath)) { Directory.CreateDirectory(extendCodePath); } #endregion #region 生成csproj项目文件 string projGuid = string.Empty; string projName = projPath + _proj.Namespace + "." + DTOEntity.AssemblyEndTag + ".csproj"; if (File.Exists(projName)) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(projName); XmlNamespaceManager nsMgr = new XmlNamespaceManager(xmlDoc.NameTable); nsMgr.AddNamespace("ns", "http://schemas.microsoft.com/developer/msbuild/2003"); XmlNode node = xmlDoc.SelectSingleNode("/ns:Project/ns:PropertyGroup/ns:ProjectGuid", nsMgr); projGuid = node.InnerText; projGuid = projGuid.Substring(1, projGuid.Length - 2); } if (string.IsNullOrEmpty(projGuid)) { projGuid = Guid.NewGuid().ToString().ToUpper(); } TemplateDTO.Project TProj = new TemplateDTO.Project(this._proj, TemplateDTO.ProjType.Deploy); TProj.Guid = projGuid; solution.AddProj(TProj); if (!File.Exists(projName)) { string csprojString = builder.BuildCode("Project", TProj);//CodeBuilder.CreateProjBuider(TProj); sw = new StreamWriter(projName); sw.Write(csprojString); sw.Close(); } //生成targets文件 string targetsString = builder.BuildCode("ProjectTargets", TProj);//CodeBuilder.CreateProjTargetsBuider(TProj); sw = new StreamWriter(projPath + "csproj.targets"); sw.Write(targetsString); sw.Close(); #endregion #region 生成assembly信息 string assemblyString = builder.BuildCode("ProjectAssembly", TProj);//CodeBuilder.CreateProjectAssemblyBuilder(TProj); sw = new StreamWriter(assemblyPath + "AssemblyInfo.cs", false); sw.Write(assemblyString); sw.Close(); #endregion #region 针对每个实体生成实体代码 foreach (BEEntity entity in _proj.EntityList) { TemplateDTO.BEEntityDTO tEntity = new TemplateDTO.BEEntityDTO(entity); OutPut.OutPutMsg("生成实体【" + entity.Code + "】Deploy代码……"); #region 生成实体代码 string entityCode = builder.BuildCode("EntityDTO", tEntity);//CodeBuilder.CreateEntityDTOBuilder(tEntity); sw = new StreamWriter(codePath + entity.Code + DTOEntity.AttrEndTag + ".cs", false); sw.Write(entityCode); sw.Close(); #endregion #region 生成实体扩展 if (!File.Exists(extendCodePath + entity.Code + DTOEntity.AttrEndTag + "Extend.cs")) { string entityExtendCode = builder.BuildCode("EntityDTOExtend", tEntity); sw = new StreamWriter(extendCodePath + entity.Code + DTOEntity.AttrEndTag + "Extend.cs", false); sw.Write(entityExtendCode); sw.Close(); } #endregion OutPut.OutPutMsg("实体【" + entity.Code + "】Deploy代码生成成功……"); } #endregion #region 针对每个DTO生成代码 foreach (DTOEntity entity in _proj.DTOList) { TemplateDTO.BEEntityDTO tEntity = new TemplateDTO.BEEntityDTO(entity); OutPut.OutPutMsg("生成实体【" + entity.Code + "】代码……"); #region 生成实体代码 string entityCode = builder.BuildCode("EntityDTO", tEntity); sw = new StreamWriter(codePath + entity.Code + ".cs", false); sw.Write(entityCode); sw.Close(); #endregion #region 生成实体扩展 if (!File.Exists(extendCodePath + entity.Code + "Extend.cs")) { string entityExtendCode = builder.BuildCode("EntityDTOExtend", tEntity); sw = new StreamWriter(extendCodePath + entity.Code + "Extend.cs", false); sw.Write(entityExtendCode); sw.Close(); } #endregion OutPut.OutPutMsg("实体【" + entity.Code + "】代码生成成功……"); } #endregion #region 针对每个枚举生成代码 foreach (EnumEntity entity in _proj.EnumList) { Builder.Build.TemplateDTO.Enum tEntity = new TemplateDTO.Enum(entity, true); OutPut.OutPutMsg("生成枚举【" + entity.Code + "】代码……"); #region 生成实体代码 string entityCode = builder.BuildCode("EnumDTO", tEntity); sw = new StreamWriter(codePath + entity.Code + DTOEntity.AttrEndTag + ".cs", false); sw.Write(entityCode); sw.Close(); #endregion #region 生成实体扩展 if (!File.Exists(extendCodePath + entity.Code + DTOEntity.AttrEndTag + "Extend.cs")) { string entityExtendCode = builder.BuildCode("EnumDTOExtend", tEntity); sw = new StreamWriter(extendCodePath + entity.Code + DTOEntity.AttrEndTag + "Extend.cs", false); sw.Write(entityExtendCode); sw.Close(); } #endregion OutPut.OutPutMsg("枚举【" + entity.Code + "】代码生成成功……"); } #endregion #endregion #region 生成 BE 部分代码 #region 生成生成BE代码过程中可能用到的文件夹 projPath = basePath + @"\BE\"; assemblyPath = projPath + @"Properties\"; codePath = projPath + @"Entity\"; extendCodePath = projPath + @"Extend\"; if (!Directory.Exists(projPath)) { Directory.CreateDirectory(projPath); } if (!Directory.Exists(assemblyPath)) { Directory.CreateDirectory(assemblyPath); } if (!Directory.Exists(codePath)) { Directory.CreateDirectory(codePath); } if (!Directory.Exists(extendCodePath)) { Directory.CreateDirectory(extendCodePath); } #endregion #region 生成csproj项目文件 projGuid = string.Empty; projName = projPath + _proj.Namespace + ".csproj"; if (File.Exists(projName)) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(projName); XmlNamespaceManager nsMgr = new XmlNamespaceManager(xmlDoc.NameTable); nsMgr.AddNamespace("ns", "http://schemas.microsoft.com/developer/msbuild/2003"); XmlNode node = xmlDoc.SelectSingleNode("/ns:Project/ns:PropertyGroup/ns:ProjectGuid", nsMgr); projGuid = node.InnerText; projGuid = projGuid.Substring(1, projGuid.Length - 2); } if (string.IsNullOrEmpty(projGuid)) { projGuid = Guid.NewGuid().ToString().ToUpper(); } TProj = new TemplateDTO.Project(this._proj, TemplateDTO.ProjType.BE); TProj.Guid = projGuid; solution.AddProj(TProj); //不存在项目文件的时候才生成项目文件 if (!File.Exists(projName)) { string csprojString = builder.BuildCode("Project", TProj); //将生成的资源文件嵌入到程序中去 sw = new StreamWriter(projName); sw.Write(csprojString); sw.Close(); } //生成targets文件,每次必须生成 targetsString = builder.BuildCode("ProjectTargets", TProj); sw = new StreamWriter(projPath + "csproj.targets"); sw.Write(targetsString); sw.Close(); #endregion #region 生成assembly信息 assemblyString = builder.BuildCode("ProjectAssembly", TProj); sw = new StreamWriter(assemblyPath + "AssemblyInfo.cs", false); sw.Write(assemblyString); sw.Close(); #endregion #region 针对每个实体生成实体代码 foreach (BEEntity entity in _proj.EntityList) { OutPut.OutPutMsg("生成实体【" + entity.Code + "】代码……"); TemplateDTO.BEEntity tEntity = new TemplateDTO.BEEntity(entity); #region 生成实体代码 string entityCode = assemblyString = builder.BuildCode("Entity", tEntity); sw = new StreamWriter(codePath + entity.Code + ".cs", false); sw.Write(entityCode); sw.Close(); #endregion #region 生成实体扩展 if (!File.Exists(extendCodePath + entity.Code + "Extend.cs")) { string entityExtendCode = builder.BuildCode("EntityExtend", tEntity); sw = new StreamWriter(extendCodePath + entity.Code + "Extend.cs", false); sw.Write(entityExtendCode); sw.Close(); } #endregion OutPut.OutPutMsg("实体【" + entity.Code + "】代码生成成功……"); } #endregion #region 针对每个枚举生成实体代码 foreach (EnumEntity entity in _proj.EnumList) { OutPut.OutPutMsg("生成实体【" + entity.Code + "】代码……"); TemplateDTO.Enum tEntity = new TemplateDTO.Enum(entity, false); #region 生成实体代码 string entityCode = builder.BuildCode("Enum", tEntity); sw = new StreamWriter(codePath + entity.Code + ".cs", false); BuildEnumEntity bc = new BuildEnumEntity(entity); sw.Write(entityCode); sw.Close(); #endregion #region 生成实体扩展 if (!File.Exists(extendCodePath + entity.Code + "Extend.cs")) { string entityExtendCode = builder.BuildCode("EnumExtend", tEntity); sw = new StreamWriter(extendCodePath + entity.Code + "Extend.cs", false); sw.Write(entityExtendCode); sw.Close(); } #endregion OutPut.OutPutMsg("实体【" + entity.Code + "】代码生成成功……"); } #endregion #region 生成实体对应的NH配置文件代码 this.BuildCfgXML(null); #endregion #endregion #region 生成solution文件 string slnName = basePath + "\\" + _proj.Namespace + ".sln"; if (!File.Exists(slnName)) { string solutionString = builder.BuildCode("Solution", solution); sw = new StreamWriter(slnName); sw.Write(solutionString); sw.Close(); } #endregion return string.Empty; }
public string BuildCode() { CodeBuilder builder = new CodeBuilder(); TemplateDTO.Solution solution = new TemplateDTO.Solution(); string basePath = GetBasePath(); StreamWriter sw = null; #region 生成 Deploy 部分代码 #region 生成生成Deploy代码过程中可能用到的文件夹 string projPath = basePath + @"\Deploy\"; string assemblyPath = projPath + @"Properties\"; string codePath = projPath + @"Entity\"; string extendCodePath = projPath + @"Extend\"; if (!Directory.Exists(projPath)) { Directory.CreateDirectory(projPath); } if (!Directory.Exists(assemblyPath)) { Directory.CreateDirectory(assemblyPath); } if (!Directory.Exists(codePath)) { Directory.CreateDirectory(codePath); } if (!Directory.Exists(extendCodePath)) { Directory.CreateDirectory(extendCodePath); } #endregion #region 生成csproj项目文件 string projGuid = string.Empty; string projName = projPath + _proj.Namespace + "." + DTOEntity.AssemblyEndTag + ".csproj"; if (File.Exists(projName)) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(projName); XmlNamespaceManager nsMgr = new XmlNamespaceManager(xmlDoc.NameTable); nsMgr.AddNamespace("ns", "http://schemas.microsoft.com/developer/msbuild/2003"); XmlNode node = xmlDoc.SelectSingleNode("/ns:Project/ns:PropertyGroup/ns:ProjectGuid", nsMgr); projGuid = node.InnerText; projGuid = projGuid.Substring(1, projGuid.Length - 2); } if (string.IsNullOrEmpty(projGuid)) { projGuid = Guid.NewGuid().ToString().ToUpper(); } TemplateDTO.Project TProj = new TemplateDTO.Project(this._proj, TemplateDTO.ProjType.Deploy); TProj.Guid = projGuid; solution.AddProj(TProj); if (!File.Exists(projName)) { string csprojString = builder.BuildCode("Project", TProj); sw = new StreamWriter(projName); sw.Write(csprojString); sw.Close(); } //生成targets文件 string targetsString = builder.BuildCode("ProjectTargets", TProj); sw = new StreamWriter(projPath + "csproj.targets"); sw.Write(targetsString); sw.Close(); #endregion #region 生成assembly信息 string assemblyString = builder.BuildCode("ProjectAssembly", TProj); sw = new StreamWriter(assemblyPath + "AssemblyInfo.cs", false); sw.Write(assemblyString); sw.Close(); #endregion #region 针对每个DTO生成代码 foreach (DTOEntity entity in _proj.DTOList) { TemplateDTO.BEEntityDTO tEntity = new TemplateDTO.BEEntityDTO(entity); Net.Code.Builder.Util.OutPut.OutPutMsg("生成实体【" + entity.Code + "】代码……"); #region 生成实体代码 string entityCode = builder.BuildCode("EntityDTO", tEntity); sw = new StreamWriter(codePath + entity.Code + ".cs", false); sw.Write(entityCode); sw.Close(); #endregion #region 生成实体扩展 if (!File.Exists(extendCodePath + entity.Code + "Extend.cs")) { string entityExtendCode = builder.BuildCode("EntityDTOExtend", tEntity); sw = new StreamWriter(extendCodePath + entity.Code + "Extend.cs", false); sw.Write(entityExtendCode); sw.Close(); } #endregion Net.Code.Builder.Util.OutPut.OutPutMsg("实体【" + entity.Code + "】代码生成成功……"); } #endregion #endregion #region 生成 Agent 部分代码 #region 生成生成Agent代码过程中可能用到的文件夹 projPath = basePath + @"\Agent\"; assemblyPath = projPath + @"Properties\"; codePath = projPath + @"Proxy\"; if (!Directory.Exists(projPath)) { Directory.CreateDirectory(projPath); } if (!Directory.Exists(assemblyPath)) { Directory.CreateDirectory(assemblyPath); } if (!Directory.Exists(codePath)) { Directory.CreateDirectory(codePath); } #endregion #region 生成csproj项目文件 projGuid = string.Empty; projName = projPath + _proj.Namespace + "." + BPProj.AgentTag + ".csproj"; if (File.Exists(projName)) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(projName); XmlNamespaceManager nsMgr = new XmlNamespaceManager(xmlDoc.NameTable); nsMgr.AddNamespace("ns", "http://schemas.microsoft.com/developer/msbuild/2003"); XmlNode node = xmlDoc.SelectSingleNode("/ns:Project/ns:PropertyGroup/ns:ProjectGuid", nsMgr); projGuid = node.InnerText; projGuid = projGuid.Substring(1, projGuid.Length - 2); } if (string.IsNullOrEmpty(projGuid)) { projGuid = Guid.NewGuid().ToString().ToUpper(); } TProj = new TemplateDTO.Project(this._proj, TemplateDTO.ProjType.Agent); TProj.Guid = projGuid; solution.AddProj(TProj); if (!File.Exists(projName)) { string csprojString = builder.BuildCode("Project", TProj); sw = new StreamWriter(projName); sw.Write(csprojString); sw.Close(); } //生成targets文件 targetsString = builder.BuildCode("ProjectTargets", TProj); sw = new StreamWriter(projPath + "csproj.targets"); sw.Write(targetsString); sw.Close(); #endregion #region 生成assembly信息 assemblyString = builder.BuildCode("ProjectAssembly", TProj); sw = new StreamWriter(assemblyPath + "AssemblyInfo.cs", false); sw.Write(assemblyString); sw.Close(); #endregion #region 针对每个实体生成Agent代码 foreach (BPEntity entity in _proj.EntityList) { Net.Code.Builder.Util.OutPut.OutPutMsg("生成实体【" + entity.Code + "】代码……"); TemplateDTO.BPEntity tEntity = new TemplateDTO.BPEntity(entity); #region 生成实体代码 string agentCode = builder.BuildCode("BPAgent", tEntity); sw = new StreamWriter(codePath + entity.Code + "Agent.cs", false); sw.Write(agentCode); sw.Close(); #endregion Net.Code.Builder.Util.OutPut.OutPutMsg("实体【" + entity.Code + "】代码生成成功……"); } #endregion #endregion #region 生成BP部分代码 #region 生成生成BP代码过程中可能用到的文件夹 projPath = basePath + @"\BP\"; assemblyPath = projPath + @"Properties\"; codePath = projPath + @"BPEntity\"; extendCodePath = projPath + @"Extend\"; if (!Directory.Exists(projPath)) { Directory.CreateDirectory(projPath); } if (!Directory.Exists(assemblyPath)) { Directory.CreateDirectory(assemblyPath); } if (!Directory.Exists(codePath)) { Directory.CreateDirectory(codePath); } if (!Directory.Exists(extendCodePath)) { Directory.CreateDirectory(extendCodePath); } #endregion #region 生成csproj项目文件 projGuid = string.Empty; projName = projPath + _proj.Namespace + ".csproj"; if (File.Exists(projName)) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(projName); XmlNamespaceManager nsMgr = new XmlNamespaceManager(xmlDoc.NameTable); nsMgr.AddNamespace("ns", "http://schemas.microsoft.com/developer/msbuild/2003"); XmlNode node = xmlDoc.SelectSingleNode("/ns:Project/ns:PropertyGroup/ns:ProjectGuid", nsMgr); projGuid = node.InnerText; projGuid = projGuid.Substring(1, projGuid.Length - 2); } if (string.IsNullOrEmpty(projGuid)) { projGuid = Guid.NewGuid().ToString().ToUpper(); } TProj = new TemplateDTO.Project(this._proj, TemplateDTO.ProjType.BP); TProj.Guid = projGuid; solution.AddProj(TProj); if (!File.Exists(projName)) { string csprojString = builder.BuildCode("Project", TProj); sw = new StreamWriter(projName); sw.Write(csprojString); sw.Close(); } //生成targets文件 targetsString = builder.BuildCode("ProjectTargets", TProj); sw = new StreamWriter(projPath + "csproj.targets"); sw.Write(targetsString); sw.Close(); #endregion #region 生成assembly信息 assemblyString = builder.BuildCode("ProjectAssembly", TProj); sw = new StreamWriter(assemblyPath + "AssemblyInfo.cs", false); sw.Write(assemblyString); sw.Close(); #endregion #region 针对每个BP实体生成实体代码 foreach (BPEntity entity in _proj.EntityList) { OutPut.OutPutMsg("生成实体【" + entity.Code + "】代码……"); TemplateDTO.BPEntity tEntity = new TemplateDTO.BPEntity(entity); string bpCode = builder.BuildCode("BPProxy", tEntity); #region 生成BP实体代码 sw = new StreamWriter(codePath + entity.Code + ".cs", false); sw.Write(bpCode); sw.Close(); #endregion #region 生成BP实体扩展 if (!File.Exists(extendCodePath + entity.Code + "Extend.cs")) { string bpCodeExtend = builder.BuildCode("BPExtend", tEntity); sw = new StreamWriter(extendCodePath + entity.Code + "Extend.cs", false); sw.Write(bpCodeExtend); sw.Close(); } #endregion OutPut.OutPutMsg("实体【" + entity.Code + "】代码生成成功……"); } #endregion #endregion #region 生成solution文件 string slnName = basePath + "\\" + _proj.Namespace + ".sln"; if (!File.Exists(slnName)) { string solutionString = builder.BuildCode("Solution", solution); sw = new StreamWriter(slnName); sw.Write(solutionString); sw.Close(); } #endregion this.BuildCfgXML(null); return string.Empty; }