11 10 08 功能強大的T4文字模版

2022-04-29 16:24:06 字數 3380 閱讀 5338

希望您至少能意識到即使有**自動生成器,但資料庫結構變更等因素也會給我們帶來不少的麻煩。這種直接放到專案裡.tt檔案的好處自然不用多說了。有特別的業務需求,在.用partial類來實現,免得模板檔案自動更新**時將手寫的**覆蓋掉。

看一下下面這個示例你應該就會明白了:

新建乙個控制台應用程式,刪除裡面的所有檔案,新建乙個program.tt的檔案,並輸入如下內容:

c#" debug="

true

" #>

.cs" encoding="

utf-8

" #>

string classname = "

program

";#>

namespace helloangel

}}

儲存後我們會看到解決方案資源管理器中是這個樣式的:

此時的program.cs檔案正是我們的program.tt檔案生成的,其內容如下:

namespace helloangel

}}

看看下面兩個指令:

<

#@ template

language

="c#"

debug

="true"

#>

<

#@ output

extension

=".cs"

encoding

="utf-8"

#>

指令中language指定了我們模板執行使用的語言,可以是vb,或c#,debug宣告了是否使用除錯,如果用不到除錯,可以設定為false.

指令中extension指定了輸出檔案的副檔名,encoding指定輸出檔案的編碼方案。

也就是說,我們可以使用c#語言來寫此模板檔案中的邏輯,模板將會輸出乙個與模板檔名相同,擴充套件名為.cs編碼為utf-8的檔案。

這裡稍作了解下,接下來看看指令的語法吧:

指令的語法如下所示:

<

#@ directivename

[attributename

= "attributevalue"

] ... #

>

必須將所有特性值放在雙引號內。如果值本身包含引號,則必須使用 \ 字元對這些引號進行轉義。

指令通常是模板檔案或包含的檔案中的第乙個元素。不應將它們放置在**塊 內,也不應放置在類功能塊 之後。

t4 模板指令

<

#@ template

[language

="vb"

] [hostspecific

="true"

] [debug

="true"

] [inherits

="templatebaseclass"

] [culture

="code"

] [compileroptions

="options"

] #>

t4 引數指令

<

#@ parameter

type

="full.typename"

name

="parametername"

#>

t4 輸出指令

<

#@ output

extension

=".filenameextension"

[encoding

="encoding"

] #>

t4 程式集指令

<

#@ assembly

name

="[assembly strong name|assembly file name]"

#>

t4 匯入指令

<

#@ import

namespace

="namespace"

#>

t4 包含指令

<

#@ include

file

="filepath"

#>

看了上面的指令後,就試著寫個模板檔案生成一些類來練習一下吧:

<

#@ template

language

="c#"

debug

="true"

#>

<

#@ output

extension

=".cs"

encoding

="utf-8"

#>

<

#@ import

namespace

="system.collections.generic"

#>

<

# list

> classnames =

new list<

string

>()

;list<

string

> callmethods = new list<

string

>();

#>

namespace helloangel

.show();", classname));

#>

class <

#=classname

#>

}#>

class program

#>}}

}

我們一般的專案多是分了簡單三層,有了上面的一些經驗,你應該會想。要是只寫三個類.tt檔案,就能自動給我們把整個三層維護好那多令人興奮啊!確實,我就是這樣做了乙個專案給大家分享一下:

看看現在整個專案成什麼樣子了:

這裡不止三個專案了。我加了個unittest的專案,乙個adapters的專案,看專案名稱不難看出來,unittest專案就是乙個測試專案。而adapters專案呢,是實體介面卡專案。先不管它們了。

就這麼點東西,已經完成三層的架設了,只是還是paramter方式的。沒有對儲存過程的支援。十一如果沒有人陪我過的話,我會將對儲存過程的支援新增上去。

建專案的時候建的是.net 4的,這裡我把它改為.net2.0的了。不過本人只裝有visual stuido 2010,如果您使用的是visual studio 2008請您自行將專案檔案中的版本號更正,此方法網上有許多。我就不多囉嗦了。

功能強大的KSnapshot

ksnapshot是kde整合桌面環境自帶的截圖工具,不過在gnome整合桌面環境下也可以安裝和使用它。我們可以通過新立得軟體包管理器或使用apt get命令來安裝它。假設使用命令列方式來安裝,開啟乙個gnome終端視窗,在終端視窗中輸入如下命令 sudo apt get install ksnap...

功能強大的SQL語句

1.複製表結構 sql 1.select into b from a where 1 0 select into b from a where 1 0 2.複製表記錄 複製某些字段 sql 1.insert into b a,b,c select d,e,f from a insert into b...

功能強大的sscanf 函式

int sscanf const char src,const char format,int scanf const char format,這兩個函式很相似,只是第乙個函式以src作為輸入,而第二個函式以標準輸入stdin讀取輸入 format 是格式控制字串,它包含控制字元 如 d,i,s等 ...