使用T4Scaffolding 创建自己的代码生成

nuget查找引入T4Scaffolding.Core

image

这个是最低层的,没有其他依赖,当然也没有现成的模板

image

这个有对EF的依赖,自带了生成DBContext的模板

 

image

这个自带了一些mvc的controller,action的模板

 

开发自定义的脚手架,只需要最基础的就可以开始

打开包管理器,输入get-scaffolder,可查看目前可用的脚手架

image

最基本的这两个,允许创建新的脚手架和为现有脚手架提供一个替换的t4模板

先使用第一个来创建一个。

包管理器中执行scaffold CustomScaffolder TestScaffolder

最后一个参数是要建立的脚手架的名字

image

执行成功后,会在项目中添加几个文件

image

之后再次查看可用脚手架

image

可以看到,刚创建的已经被显示出来了

运行scaffold testscaffolder

image

生成了一个类,与t4对应

image

再次执行scaffold testscaffolder

image

他会提示,这个文件已经存在了,如果想重新生成加 –force参数

 

因为在t4模板里写死了类名,所以每次生成都是这个类。如果想根据参数每次生成不同的类,则需要在ps脚本里加参数

首先修改t4模板

image

把写死的类名,写成动态调用

那这个TypeName怎么传进来的呢,查看ps文件中传递ExampleValue的地方可知

image

那这个$TypeName又是怎么传递进来的呢

image

我们需要加一个参数来接收

此时,我们执行scaffold testscaffolder Class1 –force

image

生成了名叫Class1的类(但是还在ExampleOutput.cs这个文件中,这个一会再说)

如果我们调用脚手架时,不指定类名

如执行:scaffold testscaffolder –force

image

类名没有传递进来,这样生成的东西就不正确了

我们希望参数是必须填写的

image

可以给parameter的Mandatory设置成$true这样在执行没有参数的脚手架命令后,他会提示你输入对应的参数

image

 

最后,我们解决文件名的问题

在ps脚本中查找生成的文件名(ExampleOutput)这个字符可以发现

image

后面有注释说明文件的扩展名会根据t4中定义的扩展名来

image

将固定的字符改为参数

image

然后执行

image

image

生成的文件与类名相同了。

posted @ 2013-10-24 18:05  czcz1024  阅读(693)  评论(0编辑  收藏  举报