/// <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;
        }