春节在家无聊,看见别人用的代码生成器,代码生成规范和工整,自己也写了一个基于接口的工厂模式的代码生成器.
一直偶都没有发现如何打包压缩文件.只能把部分代码共享出来. 如果需要参考所有源代码,请联系作者.
生成层的代码如下:
using System; using System.IO; using System.Text; using System.Configuration; namespace CodeManage.Operate ... { /**//// <summary> /// GenerationCode 的摘要说明。 /// </summary> public class GenerationCode ...{ protected static string DbName =ConfigurationSettings.AppSettings["DbName"]; public GenerationCode() ...{ // // TODO: 在此处添加构造函数逻辑 // } /**//// <summary> /// 生成BLL层代码 /// </summary> 生成BLL层代码#region 生成BLL层代码 public static void GenerationBllCode(string tablename) ...{ string tableinfo=""; string[] Content = new string[5]; StringBuilder strBLL = new StringBuilder(); tableinfo=GenerationAssistant.getBllTableInfo(tablename); Content[0] =tableinfo.Substring(0,tableinfo.IndexOf(",")); //表名称 Content[1] =tableinfo.Substring(tableinfo.IndexOf(",")+1,tableinfo.Length-(tableinfo.IndexOf(",")+1)); //表中文说明 Content[2] =System.DateTime.Now.ToString(); //代码生成日期 Content[3] ="北京江河瑞通有限责任公司"; //版权信息 Content[4] =DbName; //数据库名 try ...{ using (StreamReader sr = new StreamReader(System.Web.HttpContext.Current.Server.MapPath("Templates") + "/BLL.CST",System.Text.Encoding.Default)) ...{ string oneline; while ((oneline= sr.ReadLine()) != null) ...{ strBLL.Append(oneline+" "); } sr.Close(); } if (System.IO.Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".BLL") == false) ...{ System.IO.Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".BLL"); } string fname = System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".BLL/" + Content[0] + ".cs"; for (int i = 0; i < 5; i++) ...{ strBLL.Replace("$BLLkey[" + i + "]", Content[i]); } FileInfo finfo = new FileInfo(fname); using (FileStream fs = finfo.OpenWrite()) ...{ StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding("GB2312")); sw.WriteLine(strBLL); sw.Flush(); sw.Close(); } } catch (Exception err) ...{ Operate.GenerationLog.exNoteBugsToLogTxt(err,"GenerationCode.GenerationBLLCode"); } } #endregion /**//// <summary> /// 生成DALFactory层代码 /// </summary> 生成DALFactory层代码#region 生成DALFactory层代码 public static void GenerationDALFactoryCode(string strtablename) ...{ string[] Content = new string[4]; StringBuilder strDALFactory = new StringBuilder(); Content[0] =System.DateTime.Now.ToString(); //代码生成日期 Content[1] ="北京江河瑞通有限责任公司"; //版权信息 Content[2] =DbName; //数据库名 string strCreateIDAL=""; string[] TableInfo=strtablename.Split(','); for(int j=0;j<=TableInfo.Length-1;j++) ...{ strCreateIDAL+=GenerationAssistant.getIDAL(TableInfo[j]); } Content[3] =strCreateIDAL; try ...{ using (StreamReader sr = new StreamReader(System.Web.HttpContext.Current.Server.MapPath("Templates") + "/DALFactory.CST",System.Text.Encoding.Default)) ...{ string oneline; while ((oneline= sr.ReadLine()) != null) ...{ strDALFactory.Append(oneline+" "); } sr.Close(); } if (System.IO.Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".DALFactory") == false) ...{ System.IO.Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".DALFactory"); } string fname = System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".DALFactory/DataAccess.cs"; if (File.Exists(fname)) ...{ File.Delete(fname); } for (int i = 0; i < 4; i++) ...{ strDALFactory.Replace("$DALFactoryKey[" + i + "]", Content[i]); } FileInfo finfo = new FileInfo(fname); using (FileStream fs = finfo.OpenWrite()) ...{ StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding("GB2312")); sw.WriteLine(strDALFactory.ToString()); sw.Flush(); sw.Close(); } } catch (Exception err) ...{ Operate.GenerationLog.exNoteBugsToLogTxt(err,"GenerationCode.GenerationDALFactoryCode"); } //生成DataCache代码。 StringBuilder strDataCache = new StringBuilder(); try ...{ using (StreamReader sr = new StreamReader(System.Web.HttpContext.Current.Server.MapPath("Templates") + "/DataCache.CST",System.Text.Encoding.Default)) ...{ string oneline; while ((oneline= sr.ReadLine()) != null) ...{ strDataCache.Append(oneline+" "); } sr.Close(); } if (System.IO.Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".DALFactory") == false) ...{ System.IO.Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".DALFactory"); } string fname = System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".DALFactory/DataCache.cs"; if (File.Exists(fname)) ...{ File.Delete(fname); } for (int i = 0; i < 4; i++) ...{ strDataCache.Replace("$DataCacheKey[" + i + "]", Content[i]); } FileInfo finfo = new FileInfo(fname); using (FileStream fs = finfo.OpenWrite()) ...{ StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding("GB2312")); sw.WriteLine(strDataCache.ToString()); sw.Flush(); sw.Close(); } } catch (Exception err) ...{ Operate.GenerationLog.exNoteBugsToLogTxt(err,"GenerationCode.GenerationDALFactoryCode"); } } #endregion /**//// <summary> /// 生成IDAL层代码 /// </summary> 生成IDAL层代码#region 生成IDAL层代码 public static void GenerationIDALCode(string tablename) ...{ string[] Content = new string[4]; StringBuilder strIDAL = new StringBuilder(); Content[0] =System.DateTime.Now.ToString(); //代码生成日期 Content[1] ="北京江河瑞通有限责任公司"; //版权信息 Content[2] =DbName; //数据库名 Content[3] =tablename; try ...{ using (StreamReader sr = new StreamReader(System.Web.HttpContext.Current.Server.MapPath("Templates") + "/IDAL.CST",System.Text.Encoding.Default)) ...{ string oneline; while ((oneline= sr.ReadLine()) != null) ...{ strIDAL.Append(oneline+" "); } sr.Close(); } if (System.IO.Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".IDAL") == false) ...{ System.IO.Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".IDAL"); } string fname = System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".IDAL/"+tablename+".cs"; if (File.Exists(fname)) ...{ File.Delete(fname); } for (int i = 0; i < 4; i++) ...{ strIDAL.Replace("$IDALkey[" + i + "]", Content[i]); } FileInfo finfo = new FileInfo(fname); using (FileStream fs = finfo.OpenWrite()) ...{ StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding("GB2312")); sw.WriteLine(strIDAL.ToString()); sw.Flush(); sw.Close(); } } catch (Exception err) ...{ Operate.GenerationLog.exNoteBugsToLogTxt(err,"GenerationCode.GenerationIDALCode"); } } #endregion /**//// <summary> /// 生成Model层代码 /// </summary> 生成Model层代码#region 生成Model层代码 public static void GenerationModelCode(string tablename) ...{ string[] Content = new string[5]; StringBuilder strModel = new StringBuilder(); Content[0] =System.DateTime.Now.ToString(); //代码生成日期 Content[1] ="北京江河瑞通有限责任公司"; //版权信息 Content[2] =DbName; //数据库名 Content[3] =tablename; //表名 try ...{ using (StreamReader sr = new StreamReader(System.Web.HttpContext.Current.Server.MapPath("Templates") + "/Model.CST",System.Text.Encoding.Default)) ...{ string oneline; while ((oneline= sr.ReadLine()) != null) ...{ strModel.Append(oneline+" "); } sr.Close(); } if (System.IO.Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".Model") == false) ...{ System.IO.Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".Model"); } string fname = System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".Model/"+tablename+".cs"; if (File.Exists(fname)) ...{ File.Delete(fname); } Content[4] =GenerationAssistant.getPrivateValue(tablename); for (int i = 0; i < 5; i++) ...{ strModel.Replace("$Modelkey[" + i + "]", Content[i]); } FileInfo finfo = new FileInfo(fname); using (FileStream fs = finfo.OpenWrite()) ...{ StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding("GB2312")); sw.WriteLine(strModel.ToString()); sw.Flush(); sw.Close(); } } catch (Exception err) ...{ Operate.GenerationLog.exNoteBugsToLogTxt(err,"GenerationCode.GenerationModelCode"); } } #endregion /**//// <summary> /// 生成SQLServerDAL层代码 /// </summary> 生成SQLServerDAL层代码#region 生成SQLServerDAL层代码 public static void GenerationSQLServerDALCode(string tablename) ...{ string[] Content = new string[11]; StringBuilder strSQLServerDAL = new StringBuilder(); Content[0] =System.DateTime.Now.ToString(); //代码生成日期 Content[1] ="北京江河瑞通有限责任公司"; //版权信息 Content[2] =DbName; //数据库名 Content[3] =tablename; //表名 try ...{ using (StreamReader sr = new StreamReader(System.Web.HttpContext.Current.Server.MapPath("Templates") + "/SQLServerDAL.CST",System.Text.Encoding.Default)) ...{ string oneline; while ((oneline= sr.ReadLine()) != null) ...{ strSQLServerDAL.Append(oneline+" "); } sr.Close(); } if (System.IO.Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".SQLServerDAL") == false) ...{ System.IO.Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".SQLServerDAL"); } string fname = System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".SQLServerDAL/"+tablename+".cs"; if (File.Exists(fname)) ...{ File.Delete(fname); } Content[4] =Operate.GenerationAssistant.GetMaxKey(tablename); Content[5] =Operate.GenerationAssistant.GetExists(tablename); Content[6] =Operate.GenerationAssistant.GetAdd(tablename); Content[7] =Operate.GenerationAssistant.GetUpdate(tablename); Content[8] =Operate.GenerationAssistant.GetDelete(tablename); Content[9] =Operate.GenerationAssistant.GetModel(tablename); Content[10] =Operate.GenerationAssistant.GetList(tablename); for (int i = 0; i < 11; i++) ...{ strSQLServerDAL.Replace("$SQLServerDALkey[" + i + "]", Content[i]); } FileInfo finfo = new FileInfo(fname); using (FileStream fs = finfo.OpenWrite()) ...{ StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding("GB2312")); sw.WriteLine(strSQLServerDAL.ToString()); sw.Flush(); sw.Close(); } } catch (Exception err) ...{ Operate.GenerationLog.exNoteBugsToLogTxt(err,"GenerationCode.GenerationSQLServerDALCode"); } //生成DbHelperSQL代码。 StringBuilder strDbHelperSQL = new StringBuilder(); try ...{ using (StreamReader sr = new StreamReader(System.Web.HttpContext.Current.Server.MapPath("Templates") + "/DbHelperSQL.CST",System.Text.Encoding.Default)) ...{ string oneline; while ((oneline= sr.ReadLine()) != null) ...{ strDbHelperSQL.Append(oneline+" "); } sr.Close(); } if (System.IO.Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".SQLServerDAL") == false) ...{ System.IO.Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".SQLServerDAL"); } string fname = System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + "/"+DbName+".SQLServerDAL/DbHelperSQL.cs"; if (File.Exists(fname)) ...{ File.Delete(fname); } for (int i = 0; i < 3; i++) ...{ strDbHelperSQL.Replace("$SQLServerDALkey[" + i + "]", Content[i]); } FileInfo finfo = new FileInfo(fname); using (FileStream fs = finfo.OpenWrite()) ...{ StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding("GB2312")); sw.WriteLine(strDbHelperSQL.ToString()); sw.Flush(); sw.Close(); } } catch (Exception err) ...{ Operate.GenerationLog.exNoteBugsToLogTxt(err,"GenerationCode.GenerationSQLServerDALCode"); } } #endregion }}简单模版本文件如下(提供一个模版例子):
/ * + ---------------------------------------- + | 类 名称:表映射的属性信息| 功能说明: $ Modelkey[ 3 ]属性信息| 维护记录:Y / A| 代码生成:代码生成器| 联系方式:zlp@richway . cc| 创建日期: $ Modelkey[ 0 ]| 版权信息:版权所有 2007 $ Modelkey[ 1 ] + ----------------------------------------- + * / using System ; namespace $ Modelkey[ 2 ] . Model{ /// < summary > /// 实体类 $ Modelkey[ 3 ]。 ( 属性说明自动提取数据库字段的描述信息 ) /// </ summary > public class $ Modelkey[ 3 ] { public $ Modelkey[ 3 ] () {} # region Model $ Modelkey[ 4 ] # endregion Model }}调用如下(生成SQLServerDAL层代码):
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.IO; using System.Text; namespace CodeManage... ... { /**//**//**//// <summary> /// WebForm1 的摘要说明。 /// </summary> public class WebForm1 : System.Web.UI.Page ......{ protected static string DbName =System.Configuration.ConfigurationSettings.AppSettings["DbName"]; private void Page_Load(object sender, System.EventArgs e) ......{ // 在此处放置用户代码以初始化页面 string DbName="Reservoir",tablename="Log"; string[] Content = new string[11]; StringBuilder strSQLServerDAL = new StringBuilder(); Content[0] =System.DateTime.Now.ToString(); //代码生成日期 Content[1] ="北京江河瑞通有限责任公司"; //版权信息 Content[2] =DbName; //数据库名 Content[3] =tablename; //表名 try ......{ using (StreamReader sr = new StreamReader(System.Web.HttpContext.Current.Server.MapPath("Templates") + "SQLServerDAL.CST",System.Text.Encoding.Default)) ......{ string oneline; while ((oneline= sr.ReadLine()) != null) ......{ strSQLServerDAL.Append(oneline+" "); } sr.Close(); } if (System.IO.Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + ""+DbName+".SQLServerDAL") == false) ......{ System.IO.Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + ""+DbName+".SQLServerDAL"); } string fname = System.Web.HttpContext.Current.Server.MapPath("Generation_Code") + ""+DbName+".SQLServerDAL est.cs"; if (File.Exists(fname)) ......{ File.Delete(fname); } Content[4] =Operate.GenerationAssistant.GetMaxKey(tablename); Content[5] =Operate.GenerationAssistant.GetExists(tablename); Content[6] =Operate.GenerationAssistant.GetAdd(tablename); Content[7] =Operate.GenerationAssistant.GetUpdate(tablename); Content[8] =Operate.GenerationAssistant.GetDelete(tablename); Content[9] =Operate.GenerationAssistant.GetModel(tablename); Content[10] =Operate.GenerationAssistant.GetList(tablename); for (int i = 0; i < 11; i++) ......{ strSQLServerDAL.Replace("$SQLServerDALkey[" + i + "]", Content[i]); } FileInfo finfo = new FileInfo(fname); using (FileStream fs = finfo.OpenWrite()) ......{ StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.GetEncoding("GB2312")); sw.WriteLine(strSQLServerDAL.ToString()); sw.Flush(); sw.Close(); } } catch (Exception err) ......{ Operate.GenerationLog.exNoteBugsToLogTxt(err,"GenerationCode.GenerationSQLServerDALCode"); } } Web 窗体设计器生成的代码Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码 override protected void OnInit(EventArgs e) ......{ // // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /**//**//**//// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() ......{ this.Load += new System.EventHandler(this.Page_Load); } #endregion }}