国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

T4文本模板轉(zhuǎn)換過程

2019-11-17 01:35:20
字體:
供稿:網(wǎng)友

T4文本模板轉(zhuǎn)換過程

T4文本模板轉(zhuǎn)換過程將文本模板文件作為輸入,生成一個(gè)新的文本文件作為輸出。 例如,可以使用文本模板生成 Visual Basic 或 C# 代碼,還可以生成 HTML 報(bào)告。

有三個(gè)組件參與這一過程:引擎宿主指令處理器。 引擎對該過程進(jìn)行控制(引擎與宿主和指令處理器交互),以生成輸出文件;宿主提供與環(huán)境的所有交互(如定位文件和程序集); 指令處理器為文本模板添加功能(如從 xml 文件或數(shù)據(jù)庫讀取數(shù)據(jù)等)。

組件:

組件 說明 可自定義(是/否)
引擎 引擎組件控制文本模板轉(zhuǎn)換過程。
主機(jī) 宿主是引擎與用戶環(huán)境之間的接口。 Visual Studio 是文本轉(zhuǎn)換過程的宿主。 是。 可以編寫自定義宿主。
指令處理器 指令處理器是處理文本模板中的指令的類。 可以使用指令從輸入源向文本模板提供數(shù)據(jù)。 是。 可以編寫自定義指令處理器。

引擎:

引擎以字符串形式從宿主接收模板,而宿主處理在轉(zhuǎn)換過程中所用的所有文件。 接下來,引擎請求宿主定位所有自定義指令處理器和環(huán)境中的其他方面。 然后,引擎編譯和運(yùn)行生成轉(zhuǎn)換類。 引擎將生成的文本返回給宿主,宿主通常將該文本保存到文件中。

宿主:

宿主負(fù)責(zé)轉(zhuǎn)換過程之外與環(huán)境有關(guān)的所有操作,包括:

1)查找引擎或指令處理器請求的文本和二進(jìn)制文件。 宿主可以搜索目錄和全局程序集緩存以查找程序集。 宿主可以為引擎查找自定義指令處理器代碼。 宿主還可以查找并讀取文本文件,然后以字符串形式返回其內(nèi)容。

2)提供標(biāo)準(zhǔn)程序集和命名空間的列表,供引擎用于創(chuàng)建生成轉(zhuǎn)換類。

3)提供引擎在編譯和執(zhí)行生成轉(zhuǎn)換類時(shí)所用的應(yīng)用程序域。 將使用獨(dú)立應(yīng)用程序域,以免宿主應(yīng)用程序受到模板代碼錯(cuò)誤的影響。

4)寫入生成的輸出文件。

5)設(shè)置生成的輸出文件的默認(rèn)擴(kuò)展名。

6)處理文本模板轉(zhuǎn)換錯(cuò)誤。 例如,宿主可以將錯(cuò)誤顯示在用戶界面中,也可以將錯(cuò)誤寫入文件。 (在 Visual Studio 中,錯(cuò)誤顯示在“錯(cuò)誤消息”窗口中。)

7)在用戶調(diào)用了指令但未提供值時(shí),提供必需的參數(shù)值。 指令處理器可以指定指令名稱和參數(shù),可以請求宿主提供默認(rèn)值(如果有)。

指令和指令處理器:

指令是文本模板中的命令。 它向生成過程提供參數(shù)。 通常,指令定義模型或其他輸入的源和類型,以及輸出文件的文件擴(kuò)展名等。

指令處理器可以處理一個(gè)或多個(gè)指令。 轉(zhuǎn)換模板之前,必須安裝能夠處理模板中的指令的指令處理器。


有了基本的概念,我們看下面的Demo(在程序中動態(tài)執(zhí)行T4模板):


在程序中動態(tài)執(zhí)行T4模板:

執(zhí)行結(jié)果:

image

CustomTextTemplatingEngineHost.cs(自定義文本模板宿主?)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.VisualStudio.TextTemplating;
using System.CodeDom.Compiler;
using System.IO;
namespace CustomHost
{
    public class CustomTextTemplatingEngineHost : ITextTemplatingEngineHost, ITextTemplatingsessionHost
    {
        #region ITextTemplatingEngineHost
        internal string TemplateFileValue;
<PRe style="border-t
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 武安市| 班玛县| 宜兰县| 河池市| 泾源县| 克拉玛依市| 南岸区| 鄯善县| 定兴县| 吉木乃县| 兴化市| 永登县| 峨眉山市| 土默特右旗| 西吉县| 潢川县| 杨浦区| 木兰县| 阿鲁科尔沁旗| 桂平市| 平陆县| 宁明县| 鞍山市| 隆德县| 固安县| 河北区| 山东省| 吴桥县| 措美县| 景谷| 怀柔区| 乌兰浩特市| 惠州市| 宜昌市| 莱芜市| 琼结县| 临夏市| 阿拉善盟| 龙岩市| 高要市| 高要市|