自己动手做个代码生成器(一)
2018-11-19 本文已影响0人
singba
本文以VS中的文本模板,介绍一种代码生成方法
新增文本模板文件Entity.tt(在项模板中选择"文本模板")
image.png- 看看文件里有什么
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".txt" #>
- 最后一行 output extension=".txt" 设置输出文件扩展名为.txt,我们改成.cs
<#@ output extension=".cs" #>
-
保存文件(ctrl+s),可以看到项目里文件已经修改为Entity.cs
image.png - 这时候打开Entity.cs文件,还是什么都没有,因为我们什么都没做?
写一段代码试试
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".cs" #>
namespace TextCode
{
public class TestClass
{
}
}
保存看看,是不是生成了代码,对,只是拷贝了一份,并没有什么魔法
再修改一下代码Entity.tt
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".cs" #>
namespace TextCode
{
public class TestClass
{
<#for(int i=0;i<10;i++){#>
public string Field<#=i+1#> {get;set;}
<#}#>
}
}
再看一下生成的代码 Entity.cs
namespace TextCode
{
public class TestClass
{
public string Field1 {get;set;}
public string Field2 {get;set;}
public string Field3 {get;set;}
public string Field4 {get;set;}
public string Field5 {get;set;}
public string Field6 {get;set;}
public string Field7 {get;set;}
public string Field8 {get;set;}
public string Field9 {get;set;}
public string Field10 {get;set;}
}
}
再往上看看代码,我们可以看出
- 如果要文本输出,只要写在<##>以外就可以,反之,如果要添加模板文件要运行的代码,则需要写到<#...#>中间
- 如果是简单的值输出,只需要写
<#={运算式}#>
,注意"="是必须的
好了,先开个头,你有兴趣试试吗?