日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

CodeSmith基础(七)

發(fā)布時(shí)間:2025/4/5 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CodeSmith基础(七) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文翻譯的內(nèi)容為CodeSmith控制臺(tái)指南。

很多人僅僅知道CodeSmith像一個(gè)圖形應(yīng)用程序,或者可能是一個(gè)Visual Studio的附件,但是通過CodeSmith的控制臺(tái)應(yīng)用程序還有好多其他的使用方法。控制臺(tái)應(yīng)用程序是很有價(jià)值的,因?yàn)榭梢酝ㄟ^它去生成腳本,或者其他一些自動(dòng)工具。這篇文檔的目的就是要告訴你怎樣使用它的控制臺(tái)應(yīng)用程序并且如何去定義變量和參數(shù)。

Basic Usage

大多數(shù)情況下是用控制臺(tái)應(yīng)用程序來創(chuàng)建一個(gè)模板,一個(gè)屬性文件,然后保存輸出的文件。這有一個(gè)很好的例子介紹將合并模版的處理過程放到一個(gè)過程中,就像使用NAnt工具。

首先我們要確定完成一個(gè)什么樣的模版,為這個(gè)模板創(chuàng)建一個(gè)什么樣的XML屬性文件。XML屬性文件提供在執(zhí)行模版是需要的各個(gè)屬性。生成一個(gè)屬性文件最簡單的方法是在CodeSmith Explorer中打開一個(gè)模版,填寫屬性,點(diǎn)擊生成按鈕generate,然后再點(diǎn)擊Save Property Set XML按鈕。這個(gè)按鈕會(huì)在點(diǎn)擊完生成按鈕后找到,在Save OutputCopy Output按鈕旁邊。然后系統(tǒng)提示輸入保存XML屬性文件的文件名,下面看一個(gè)ArrayList.cst模版創(chuàng)建的XML屬性文件。

?1<?xml?version="1.0"?encoding="us-ascii"?>
?2<codeSmith>
?3????????????<propertySet>
?4????????????????????????<property?name="Accessibility">Public</property>
?5????????????????????????<property?name="ClassName">PersonArray</property>
?6????????????????????????<property?name="ItemType">Person</property>
?7????????????????????????<property?name="ItemValueType">False</property>
?8????????????????????????<property?name="ItemCustomSearch">False</property>
?9????????????????????????<property?name="KeyName">PersonID</property>
10????????????????????????<property?name="KeyType">int</property>
11????????????????????????<property?name="IncludeInterfaces">True</property>
12????????????????????????<property?name="IncludeNamespaces">False</property>
13????????????</propertySet>
14</codeSmith>

就像看到的一樣,也可以手動(dòng)創(chuàng)建這個(gè)文件,但是使用

CodeSmith Explorer會(huì)更簡便。

現(xiàn)在我們有了這個(gè)XML文件,我們繼續(xù)看一下如何去執(zhí)行這個(gè)模版并是用控制臺(tái)工具保存結(jié)果。首先我們需要是用/template參數(shù)去聲明我們要是用的模版,像這樣:

C:\Program Files\CodeSmith\v3.0>cs /template:Samples\Collections\ArrayList.cst

在這個(gè)例子中我們使用了ArrayList.cst模版,它存儲(chǔ)在本地的Samples\Collections文件夾下。下一步我們要去聲明我們在最后一步需要?jiǎng)?chuàng)建的XML文件,我們是用/propertyset參數(shù)去實(shí)現(xiàn)。

C:\Program Files\CodeSmith\v3.0>cs /template:Samples\Collections\ArrayList.cst? /propertyset:PersonArray.xml

這個(gè)/property參數(shù)用來指定我們的XML屬性文件。最后一個(gè)我們需要用的參數(shù)是/output參數(shù),用來指定輸出怎樣被保存。

C:\Program Files\CodeSmith\v3.0>cs /template:Samples\Collections\ArrayList.cst /propertyset:PersonArray.xml /out:test.cs

使用/out參數(shù)指定將結(jié)果輸出到一個(gè)叫test.cs文件中保存。執(zhí)行這個(gè)命令后,模板將開始運(yùn)行,使用屬性文件將結(jié)果輸出到test.cs文件保存。

這是大多數(shù)情況下有效使用控制臺(tái)。

?

Merging Output

在各種代碼生成中最大的挑戰(zhàn)就是將生成的代碼和開發(fā)人員編寫或修改的代碼區(qū)分開。控制臺(tái)對(duì)這個(gè)問題提供了一個(gè)有效的獨(dú)特的解決方案,使用一個(gè)指定的參數(shù)在當(dāng)前已存在的代碼文件中需要將模板生成的代碼添加的地方指定一塊區(qū)域。

下面是一個(gè)簡單的代碼文件,包含了我們要添加生成代碼的區(qū)域。

1using?System;
2
3namespace?Entities
4{
5??????GeneratedOrderEntity#region?GeneratedOrderEntity
6?
7
8??????#endregion
??
9}

我們的目標(biāo)是將DatabaseSchema\BusinessObject.cst模版生成的代碼添加到類文件的GeneratedOrderEntity區(qū)域中。和上一個(gè)例子一樣,使用CodeSmith console控制臺(tái)應(yīng)用程序執(zhí)行這個(gè)模版,但是這次要使用另一個(gè)參數(shù)merge

C:\Program Files\CodeSmith\v3.0>cs /template:Samples\DatabaseSchema\BusinessObject.cst /propertyset:OrderEntity.xml /out:OrderEntity.cs /merge:InsertRegion= "RegionName=Sample Generated Region;Language=C#;"

使用merge參數(shù)我們可以指定區(qū)域的名稱,在這個(gè)例子中是GeneratedOrderEntity,然后控制臺(tái)應(yīng)用程序?qū)?zhí)行模版,并將結(jié)果添加到這個(gè)區(qū)域中。我們來看一下執(zhí)行完這個(gè)指令后生成的代碼。

?1using?System;
?2
?3namespace?Infozerk.AuthServices.UnitTestSuite
?4{
?5??????GeneratedOrderEntity#region?GeneratedOrderEntity
?6??????
?7
?8??????Order#region?Order
?9??????/**////?<summary>
10??????///?This?object?represents?the?properties?and?methods?of?a?Order.
11??????///?</summary>

12??????public?class?Order
13??????{
14????????????protected?int?_id;
15????????????protected?string?_customerID?=?String.Empty;
16????????????protected?int?_employeeID;
17????????????protected?DateTime?_orderDate;
18????????????protected?DateTime?_requiredDate;
19????????????protected?DateTime?_shippedDate;
20????????????protected?int?_shipVia;
21
22--為了簡短省略了類的其他部分

就像看到的一樣,Order類被添加到了我們指定的區(qū)域中。在代碼文件中使用merge參數(shù)生成的內(nèi)容在其他部分被修改或手寫后很容易重新再次生成而不會(huì)產(chǎn)生影響。

?

參數(shù)介紹Parameter Reference

?

Specifying Output

/out:<file>

指定從模版創(chuàng)建的輸出文件的名稱。

/out:default

指定這個(gè)文件被默認(rèn)保存成模版是用的名稱。

/merge:<mergetype>=<init>

指定模版輸出的區(qū)域。可以簡寫為/m

?

Specifying Input

/template:<file>

選擇要執(zhí)行的模版,簡寫為/t

/propertyset:<file>

生成代碼時(shí)需要使用的XML屬性文件。簡寫為/p

?

Compiler Options

/debug[+|-]

指定模版需要包含的調(diào)試信息。(允許在運(yùn)行模版時(shí)進(jìn)行調(diào)試)

/tempfiles[+|-]

指定保留臨時(shí)文件。(如果在臨時(shí)文件上調(diào)試也可以)

?

Miscellaneous

/help

顯示幫助信息。

/nologo

禁止生成器版權(quán)信息。

轉(zhuǎn)載于:https://www.cnblogs.com/wayne-ivan/archive/2007/06/15/784392.html

總結(jié)

以上是生活随笔為你收集整理的CodeSmith基础(七)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。