T4文本模板轉換過程將文本模板文件作為輸入,生成一個新的文本文件作為輸出。 例如,可以使用文本模板生成 Visual Basic 或 C# 代碼,還可以生成 HTML 報告。
有三個組件參與這一過程:引擎、宿主和指令處理器。 引擎對該過程進行控制(引擎與宿主和指令處理器交互),以生成輸出文件;宿主提供與環境的所有交互(如定位文件和程序集); 指令處理器為文本模板添加功能(如從 xml 文件或數據庫讀取數據等)。
組件:
組件 | 說明 | 可自定義(是/否) |
引擎 | 引擎組件控制文本模板轉換過程。 | 否 |
主機 | 宿主是引擎與用戶環境之間的接口。 Visual Studio 是文本轉換過程的宿主。 | 是。 可以編寫自定義宿主。 |
指令處理器 | 指令處理器是處理文本模板中的指令的類。 可以使用指令從輸入源向文本模板提供數據。 | 是。 可以編寫自定義指令處理器。 |
引擎:
引擎以字符串形式從宿主接收模板,而宿主處理在轉換過程中所用的所有文件。 接下來,引擎請求宿主定位所有自定義指令處理器和環境中的其他方面。 然后,引擎編譯和運行生成轉換類。 引擎將生成的文本返回給宿主,宿主通常將該文本保存到文件中。
宿主:
宿主負責轉換過程之外與環境有關的所有操作,包括:
1)查找引擎或指令處理器請求的文本和二進制文件。 宿主可以搜索目錄和全局程序集緩存以查找程序集。 宿主可以為引擎查找自定義指令處理器代碼。 宿主還可以查找并讀取文本文件,然后以字符串形式返回其內容。
2)提供標準程序集和命名空間的列表,供引擎用于創建生成轉換類。
3)提供引擎在編譯和執行生成轉換類時所用的應用程序域。 將使用獨立應用程序域,以免宿主應用程序受到模板代碼錯誤的影響。
4)寫入生成的輸出文件。
5)設置生成的輸出文件的默認擴展名。
6)處理文本模板轉換錯誤。 例如,宿主可以將錯誤顯示在用戶界面中,也可以將錯誤寫入文件。 (在 Visual Studio 中,錯誤顯示在“錯誤消息”窗口中。)
7)在用戶調用了指令但未提供值時,提供必需的參數值。 指令處理器可以指定指令名稱和參數,可以請求宿主提供默認值(如果有)。
指令和指令處理器:
指令是文本模板中的命令。 它向生成過程提供參數。 通常,指令定義模型或其他輸入的源和類型,以及輸出文件的文件擴展名等。
指令處理器可以處理一個或多個指令。 轉換模板之前,必須安裝能夠處理模板中的指令的指令處理器。
有了基本的概念,我們看下面的Demo(在程序中動態執行T4模板):
在程序中動態執行T4模板:
執行結果:
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
新聞熱點
疑難解答