C# 调用 CodeSmith 生成自己的代码.

废话不多说.直接进入正题.

此文章要求用户熟悉一下内容:

    C# WinForm 编程开发. CodeSmith 模版编写 .

最终效果:

   

程序说明

    为配合ssi框架整合 [2]基本参数位置 添加各种包的字符串传递.根据个人需求.自己开发.

核心说明

   因需使用CodeSmith的api . 所以第一步 . 我们需要添加 CodeSmith 的Api 类库 . 在CodeSmith 安装成功后 . 我们可在CodeSmith 下搜索到以下 dll 文件.拷贝到行不路径下 . 并添加项目引用 .

       清单:

       具体每个类库如何使用,大家可通过vs中的对象浏览器自己查看

 了解CodeSmith的朋友都知道 . CodeSmith 给我们提供了非常方便的数据源连接ui.在当前类库中.我们可以通过api中提供的类库来使用他们提供的数据源ui.

    在SchemaExplorer.Design命名空间里包含很多以UI结尾的对象. 我们直接使用new关键字.可创建对象 . 所创建的随想包含ShowDialog()方法 . 与普通winform窗体调用类似 .这里给出事例代码

        界面如图:

        

      代码如下:

         

SchemaExplorer.Design.DataSourceUI dsu = new SchemaExplorer.Design.DataSourceUI();
            dsu.ShowDialog();

    多数 UI 对象使用方式大同小异 . 大家可以研究下 .

    下一步就是生成代码:

   

CodeTemplateCompiler compiler = new CodeTemplateCompiler("..\\..\\StoredProcedures.cst");
			compiler.Compile();
			
			if (compiler.Errors.Count == 0)
			{
				CodeTemplate template = compiler.CreateInstance();

                DatabaseSchema database = new DatabaseSchema(new SqlSchemaProvider(), @"Data Source=.\SQLEXPRESS;AttachDbFilename=PetShop.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;");
				TableSchema table = database.Tables["Inventory"];
				
				template.SetProperty("SourceTable", table);
				template.SetProperty("IncludeDrop", false);
				template.SetProperty("InsertPrefix", "Insert");
				
				template.Render(Console.Out);
			}



  CodeTemplateCompiler : 为模版编译器 . 因为我们的模版使用c#代码进行别写 . 所以模版需要编译 .

  compiler.Compile() : 该代码则为编译模版 .

  compiler.Errors : 模版编译器下的容器对象 . 用来存储模版中的错误信息 . Errors.Count 为 0 说明模版正常,没有错误 .

 

CodeTemplate template = compiler.CreateInstance();

                DatabaseSchema database = new DatabaseSchema(new SqlSchemaProvider(), @"Data Source=.\SQLEXPRESS;AttachDbFilename=PetShop.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;");
				TableSchema table = database.Tables["Inventory"];
				
				template.SetProperty("SourceTable", table);
				template.SetProperty("IncludeDrop", false);
				template.SetProperty("InsertPrefix", "Insert");
				
				template.Render(Console.Out);


通过CodeTemplate 对象来填充模版参数 . 并获取生成结果 . 如下两个方法比较常用.

   template.RenderToFile(路径,是否覆盖)

       RenderToFile 需要注意的是:该方法所写的文件默认使用的 utf-8 com 编码 . 并非utf-8 . 请大家使用的时候多留心 .

   template.RenderToString()

就到这里 : 转载请注明出处 [ 深度游子-扣扣:191817533 ] 如有问题可加QQ .

  

你可能感兴趣的:(C#,WinForm)