テキスト テンプレート変換プロセスは、テキスト テンプレート ファイルを入力として受け取り、出力として新しいテキスト ファイルを生成します。 たとえば、テキスト テンプレートを使用して Visual Basic または C# コードを生成したり、HTML レポートを生成したりできます。
このプロセスには、エンジン、ホスト、ディレクティブ プロセッサの 3 つのコンポーネントが含まれます。 エンジンはプロセスを制御します。ホストとディレクティブ プロセッサと対話して出力ファイルを生成します。 ホストは、ファイルやアセンブリの検索など、環境との対話を提供します。 ディレクティブ プロセッサは、XML ファイルやデータベースからデータを読み取るなどの機能を追加します。
テキスト テンプレート変換プロセスは、2 つの手順で実行されます。 最初に、エンジンは、生成された変換クラスと呼ばれる一時クラスを作成します。 このクラスには、ディレクティブと制御ブロックによって生成されるコードが含まれています。 その後、エンジンは生成された変換クラスをコンパイルして実行し、出力ファイルを生成します。
Components
| コンポーネント | Description | カスタマイズ可能 (はい/いいえ) |
|---|---|---|
| Engine | エンジン コンポーネントは、テキスト テンプレート変換プロセスを制御します | No. |
| Host | ホストは、エンジンとユーザー環境の間のインターフェイスです。 Visual Studio は、テキスト変換プロセスのホストです。 | Yes. カスタム ホストを作成できます。 |
| ディレクティブ プロセッサ | ディレクティブ プロセッサは、テキスト テンプレート内のディレクティブを処理するクラスです。 ディレクティブを使用して、入力ソースからテキスト テンプレートにデータを提供できます。 | Yes. カスタム ディレクティブ プロセッサを記述できます |
エンジン
エンジンは、テンプレートをホストから文字列として受け取り、変換プロセスで使用されるすべてのファイルを処理します。 次に、エンジンは、カスタム ディレクティブ プロセッサや環境の他の側面を見つけるようホストに要求します。 エンジンは、生成された変換クラスをコンパイルして実行します。 エンジンは生成されたテキストをホストに返し、通常はテキストをファイルに保存します。
ホスト
ホストは、変換プロセスの外部にある環境に関連するあらゆるもの (以下を含む) を担当します。
エンジンまたはディレクティブ プロセッサによって要求されたテキスト ファイルとバイナリ ファイルの検索。 ホストは、ディレクトリとグローバル アセンブリ キャッシュを検索してアセンブリを検索できます。 ホストは、エンジンのカスタム ディレクティブ プロセッサ コードを見つけることができます。 ホストは、テキスト ファイルを検索して読み取り、その内容を文字列として返すこともできます。
生成された変換クラスを作成するためにエンジンによって使用される標準アセンブリと名前空間の一覧を提供します。
生成された変換クラスをエンジンがコンパイルして実行するときに使用されるアプリケーション ドメインを指定します。 テンプレート コードのエラーからホスト アプリケーションを保護するために、別のアプリケーション ドメインが使用されます。
生成された出力ファイルの書き込み。
生成された出力ファイルの既定の拡張子を設定します。
テキスト テンプレート変換エラーの処理。 たとえば、ホストはユーザー インターフェイスにエラーを表示したり、ファイルに書き込んだりできます。 (Visual Studio では、エラー メッセージ ウィンドウにエラーが表示されます)。
ユーザーが値を指定せずにディレクティブを呼び出した場合に、必要なパラメーター値を指定します。 ディレクティブ プロセッサは、ディレクティブの名前とパラメーターを指定し、既定値がある場合は、既定値を指定するようにホストに要求できます。
ディレクティブとディレクティブ プロセッサ
ディレクティブは、テキスト テンプレート内のコマンドです。 生成プロセスにパラメーターを提供します。 通常、ディレクティブは、モデルまたはその他の入力のソースと種類、および出力ファイルのファイル名拡張子を定義します。
ディレクティブ プロセッサは、1 つ以上のディレクティブを処理できます。 テンプレートを変換するときは、テンプレート内のディレクティブを処理できるディレクティブ プロセッサをインストールしておく必要があります。
ディレクティブは、生成された変換クラスにコードを追加することによって機能します。 テキスト テンプレートからディレクティブを呼び出すと、エンジンは生成された変換クラスを作成するときにすべてのディレクティブ呼び出しを処理します。 ディレクティブを正常に呼び出した後、テキスト テンプレートで記述するコードの残りの部分は、ディレクティブが提供する機能に依存できます。 たとえば、テンプレート内の import ディレクティブを次のように呼び出すことができます。
<#@ import namespace="System.Text" #>
標準ディレクティブ プロセッサは、これを生成された変換クラスの using ステートメントに変換します。 その後、StringBuilderとして修飾せずに、テンプレート コードの残りの部分で System.Text.StringBuilder クラスを使用できます。