Welcome

首页 / 软件开发 / .NET编程技术 / Visual Studio DSL 入门 13---结合T4生成代码

Visual Studio DSL 入门 13---结合T4生成代码2011-04-21 博客园 似水流年在前面的几节里,我们已经完成了一个简单的状态机设计器,通过这个状态机可以设计出一 个状态流,但是如果只是这样,我们直接使用UML设计工具就行了,何必自己开发呢? 我们走的 是模型驱动开发路线,呵呵,注意哥说的是开发,不是设计.这一节就和我们的开发联系起来,生 成符合我们要求的代码.

结合vs.net dsl生成代码有以下几种方式:

直接硬编码,在代码里面利用模型拼接生成的代码,我记得activewriter就是这样做的生成 nhibernate代码.

结合模板引擎,你可以使用xslt或者t4(text template transformation toolkit),或者 是codesmith等.

在这里我们使用T4来生成,vs.net已经内置支持T4引擎(dsl和linq等都是使用t4来生成 的), 即使这样,vs.net也没有内置对T4文件的编辑器,在开始下面之前,需要从这里下载免费 的Community版本安装.

1.直接运行我们的项目,可以发现在Debugging项目下面有两个tt文件,这两个文件就是生 成简单代码的一个例子,直接打开LanguageSmReport.tt

<#@ Import Namespace="System" #>
<#@ template inherits="Microsoft.VisualStudio.TextTemplating.VSHost.ModelingTextTransformation " language="C#" #>
<#@ output extension=".txt" #>
<#@ LanguageSm processor="LanguageSmDirectiveProcessor" requires="fileName="Test.mydsl5"" #>

<#
foreach (State state in StateMachine.States) {
#>
<#= state.Name #>
<#
}
#>

2.运行自定义工具,生成的文件就是附属的txt文件:

Draft
NewOrder
Cancelled
Confirmed

3. 对应的我们的状态机是我建立的一个简单的订单状态流转: