カスタム ホストを使用したテキスト テンプレートの処理
更新 : 2010 年 10 月
テキスト テンプレート変換プロセスでは、テキスト テンプレート ファイルを入力として受け取り、テキスト ファイルを出力として生成します。 テキスト変換エンジンは、Visual Studio 拡張機能か、Visual Studio がインストールされているコンピューターで実行中のスタンドアロン アプリケーションから呼び出すことができます。 ただし、テキスト テンプレート ホストを提供する必要があります。 このクラスは、テンプレートを環境に接続し、アセンブリやインクルード ファイルなどのリソースの検索と、出力およびエラー メッセージの処理を行います。
ヒント
Visual Studio 内で実行されるパッケージまたは拡張機能を作成する場合は、独自のホストを作成するのではなく、テキスト テンプレート サービスを使用することを検討します。 詳細については、「VS 拡張機能内でのテキスト変換の呼び出し」を参照してください。
注意
サーバー アプリケーションでテキスト テンプレート変換を使用することはお勧めしません。 また、シングル スレッド以外でテキスト テンプレート変換を使用することはお勧めしません。 テキスト テンプレート エンジンでは、単一の AppDomain を再利用して、テンプレートを変換、コンパイル、および実行するためです。 変換されたコードは、スレッド セーフになるように設計されているわけではありません。 デザイン時にはファイルは Visual Studio プロジェクトに含まれているので、このエンジンはファイルを連続的に処理するように設計されています。
実行時アプリケーションでは、前処理されたテキスト テンプレートを使用することを検討します。詳細については、「前処理された T4 テキスト テンプレートを使用した実行時テキスト生成」を参照してください。
コンパイル時に決定されるテンプレートのセットをアプリケーションで使用する場合は、前処理されたテキスト テンプレートを使用する方が簡単です。 この方法は、Visual Studio がインストールされていないコンピューターでアプリケーションを実行する場合にも使用できます。 詳細については、「前処理された T4 テキスト テンプレートを使用した実行時テキスト生成」を参照してください。
アプリケーションでのテキスト テンプレートの実行
テキスト テンプレートを実行するには、Microsoft.VisualStudio.TextTemplating.Engine の ProcessTemplate メソッドを呼び出します。
using Microsoft.VisualStudio.TextTemplating;
...
Engine engine = new Engine();
string output = engine.ProcessTemplate(templateString, host);
アプリケーションでは、テンプレートを見つけて提供すると共に、出力を処理する必要があります。
host パラメーターでは、ITextTemplatingEngineHost を実装するクラスを指定する必要があります。 これはエンジンによってコールバックされます。
ホストは、エラーのログ記録、アセンブリとインクルード ファイルへの参照の解決、テンプレートを実行できるアプリケーション ドメインの指定、各ディレクティブの適切なプロセッサの呼び出しを実行できる必要があります。
Microsoft.VisualStudio.TextTemplating.Engine は Microsoft.VisualStudio.TextTemplating.10.0.dll で、ITextTemplatingEngineHost は Microsoft.VisualStudio.TextTemplating.Interfaces.10.0.dll で定義されています。
このセクションの内容
- チュートリアル: カスタム テキスト テンプレート ホストの作成
テキスト テンプレートの機能を Visual Studio の外部で使用できるようにするカスタム テキスト テンプレート ホストの作成方法を示します。
参照
関連項目
テキスト テンプレート変換プロセス
テキスト変換のしくみと、カスタマイズできる部分について説明します。カスタム テキスト テンプレート ディレクティブ プロセッサの作成
テキスト テンプレート ディレクティブ プロセッサの概要を示します。
履歴の変更
日付 |
履歴 |
理由 |
---|---|---|
2010 年 10 月 |
スレッド セーフに関するメモが詳しくなりました。 |
カスタマー フィードバック |