nuget查找引入T4Scaffolding.Core

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

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

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

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

 

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

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

 

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

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

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

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

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

包管理器中执行scaffold CustomScaffolder TestScaffolder

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

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

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

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

之后再次查看可用脚手架

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

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

运行scaffold testscaffolder

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

生成了一个类,与t4对应

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

再次执行scaffold testscaffolder

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

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

 

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

首先修改t4模板

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

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

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

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

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

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

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

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

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

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

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

如执行:scaffold testscaffolder –force

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

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

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

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

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

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

 

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

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

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

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

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

将固定的字符改为参数

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

然后执行

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

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

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

相关文章: