使用T4Scaffolding 创建自己的代码生成
nuget查找引入T4Scaffolding.Core
这个是最低层的,没有其他依赖,当然也没有现成的模板
这个有对EF的依赖,自带了生成DBContext的模板
这个自带了一些mvc的controller,action的模板
开发自定义的脚手架,只需要最基础的就可以开始
打开包管理器,输入get-scaffolder,可查看目前可用的脚手架
最基本的这两个,允许创建新的脚手架和为现有脚手架提供一个替换的t4模板
先使用第一个来创建一个。
包管理器中执行scaffold CustomScaffolder TestScaffolder
最后一个参数是要建立的脚手架的名字
执行成功后,会在项目中添加几个文件
之后再次查看可用脚手架
可以看到,刚创建的已经被显示出来了
运行scaffold testscaffolder
生成了一个类,与t4对应
再次执行scaffold testscaffolder
他会提示,这个文件已经存在了,如果想重新生成加 –force参数
因为在t4模板里写死了类名,所以每次生成都是这个类。如果想根据参数每次生成不同的类,则需要在ps脚本里加参数
首先修改t4模板
把写死的类名,写成动态调用
那这个TypeName怎么传进来的呢,查看ps文件中传递ExampleValue的地方可知
那这个$TypeName又是怎么传递进来的呢
我们需要加一个参数来接收
此时,我们执行scaffold testscaffolder Class1 –force
生成了名叫Class1的类(但是还在ExampleOutput.cs这个文件中,这个一会再说)
如果我们调用脚手架时,不指定类名
如执行:scaffold testscaffolder –force
类名没有传递进来,这样生成的东西就不正确了
我们希望参数是必须填写的
可以给parameter的Mandatory设置成$true这样在执行没有参数的脚手架命令后,他会提示你输入对应的参数
最后,我们解决文件名的问题
在ps脚本中查找生成的文件名(ExampleOutput)这个字符可以发现
后面有注释说明文件的扩展名会根据t4中定义的扩展名来
将固定的字符改为参数
然后执行
生成的文件与类名相同了。