zoukankan      html  css  js  c++  java
  • 使用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

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

  • 相关阅读:
    project和task
    Gradle的安装
    Spring 集成 RMI
    RMI远程调用
    安装、启动与基本配置
    删除
    文件的分隔与合并
    my27_OGG MySQL To MySQL错误汇总
    1.5 GO json转Map
    1.4 Go语言-switch语句(转)
  • 原文地址:https://www.cnblogs.com/czcz1024/p/3386582.html
Copyright © 2011-2022 走看看